build-ui

build-ui is a command for Claude Code from doublej/consult-user-mcp. It costs 26 tokens per session (3,836 once invoked), scanned A, original, MIT.

A command for building a website's visual interface from scratch based on a behaviour contract and a specified visual direction.

In plain words
What is it for?
Use it to implement the full visual layer of a site, including its layout, styling, and asset geometry, from a design handoff or written visual direction.
Why use it?
It prevents the agent from inventing a visual style when the required direction is missing and makes it use resolved design decisions and exported assets from a handoff.

Command for Claude Code

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add commands/doublej/consult-user-mcp/build-ui
Clone the repo
git clone --depth 1 https://github.com/doublej/consult-user-mcp

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for build-ui

README.md
[![agentmods](https://agentmods.dev/badge/commands/doublej/consult-user-mcp/build-ui.svg)](https://agentmods.dev/commands/doublej/consult-user-mcp/build-ui)
Your own site
<a href="https://agentmods.dev/commands/doublej/consult-user-mcp/build-ui"><img src="https://agentmods.dev/badge/commands/doublej/consult-user-mcp/build-ui.svg" alt="Measured on agentmods" height="20"></a>
Per session 26 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 3,836 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00026 $0.03836
Opus 5 $0.00013 $0.01918
Sonnet 5 $0.00005 $0.00767
Haiku 4.5 $0.00003 $0.00384

Measured 4d ago against content hash eb0f4acfc9ad, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

build-ui scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/commands/build-ui.md · 247 lines

How it starts

The opening of the file, as written. The whole thing — 247 lines — stays where its author put it; the contents beside it link to each section on GitHub.

<visual_direction> $ARGUMENTS </visual_direction>

If <visual_direction> is empty, stop and ask for it in one sentence. Do not invent one.

If it names a file or a design-handoff archive, unpack it to your scratchpad and read it before anything else. A handoff usually contains two kinds of document and they are not equal:

  • A decision sheet ("pick one from each row") is a menu of options that may never have been answered. It is not the direction.
  • A resolved system ("locked system: …", a logo-construction page, exported assets) carries the picks that were actually made. That is the direction. Where the two disagree, the resolved system wins.

Read the exported assets too — an .svg mark tells you the final geometry and which element owns the accent. A handoff may quote values from the current Theme.swift. Those are the appearance you are blind to. Take the system (which hue, which ground, which face, which element carries the accent) and discard any literal value it attributes to today's build.

<why_this_replaces_build_skin> The previous attempt used /build-skin, which scoped the work to the skin seam and told the agent that the container's furniture — report control, project badge, note pane — was "palette only", and that the shipped prose renderer had to be reused. Those components are most of the pixels on a body-heavy surface. The result was a careful palette swap on somebody else's layout, and it was correctly rejected.

UI-RENDERING-BOUNDARY.md is the correction. Read it in full before writing anything. It moves the seam, lists exactly what you keep and what you write, and carries the behaviour embedded in each component you are replacing. Everything below assumes you have read it. </why_this_replaces_build_skin>

Treat the blindfold as a rule, not just a wall:

  • Do not read, search, reconstruct, or ask about the current appearance. If a tool call is denied, that is the system working. Move on — never route around it with a different tool, a shell command, or git history.
  • The deny-list is not airtight and you must not lean on it. Theme/, Components/, Dialogs/ and the existing skins hold the current appearance. If you find yourself about to open one, the answer is in UI-BEHAVIOUR-SPECIFICATION.md or in UI-RENDERING-BOUNDARY.md §4 — go read that instead.
  • Services/ and Models/ are not blocked and you will need them: the key router, the focus manager, the cooldown gate, the request and response models. Read those freely. They hold no pixels.
  • Never run a dialog without DIALOG_SKIN set to your own id. The default renders the current UI.
  • Screenshot only the window id returned by test-cases/capture-dialog.swift, never the screen or another window. Do not open the built app's other windows, the docs site, or any image in the repo.
  • Build output quotes source from files you must not read. Filter it — print only error headlines from your own paths. Write the filter into a script rather than reading raw build logs.

If you catch yourself reasoning from "how it probably looks today", stop.

Read the full file on GitHub · 247 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 4d ago First seen · 247 lines · 26 tokens per session scan A eb0f4acfc9ad

Subscribe to this mod's changes

build-ui is a command published in the GitHub repository doublej/consult-user-mcp (40 stars, last pushed 16d ago), licensed MIT. It adds 26 tokens to every session and 3,836 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.