Identify an unfamiliar UI element or visual style from a plain-language description, screenshot, rendered page, accessibility tree, DOM, or code clue; rank the real names, distinguish confusable patterns such as popover vs tooltip vs dropdown, verify platform semantics and API symbols, and return prompt-ready wording. Use for “what is this called?”, “name this UI element”, ambiguous component terminology, or before implementing an unnamed interaction. Do not use when the component is already named or the task is only visual polish.
Turn “I can point at it but cannot name it” into a small, evidence-backed candidate set. Naming is a routing step: it precedes component selection, implementation, and polish.
Read wiki/concepts/ui-component-vocabulary.md for the current source hierarchy and wiki/design/design-system.md for Kevin's component rules.
Separate visible facts from behavior that still needs proof. Record only the dimensions that distinguish nearby patterns:
For a screenshot, mark invocation, dismissal, focus, and keyboard behavior as unknown unless another artifact proves them. For a live page, use agent-browser read-only and inspect the accessibility tree plus one reversible interaction.
Complete when the observed facts and unknown behaviors cannot be mistaken for one another.
Search local knowledge first. The main owner is wiki/concepts/ui-component-vocabulary.md; Component Gallery is useful for cross-system examples.
For a generic, non-confidential description, NameThatUI is an allowed discovery source. Its public API records the query and the site says aggregate misses help improve retrieval, so never send customer names, unreleased product language, repository paths, URLs, credentials, incident data, or pasted application copy. Abstract the clue first, then run:
node skills/engineering/ui-vocabulary/scripts/search.mjs \
--public-query "little outline around the keyboard-selected button"The script refuses common private-data shapes and returns discovery candidates, not final authority. If the query cannot be safely abstracted, stay local and search primary documentation directly.
Rank candidates by behavioral fit. Include an alias or platform-owned name when it materially changes implementation. Do not invent a universal name when web, Apple, or a component library uses different terms.
Complete when each remaining candidate has a supporting clue and one fact that would distinguish it from the others.
Discovery does not make a term canonical. Verify the claim against the source that owns it:
Reconcile the visible behavior with the documented semantics. A DOM role or component name can be wrong in a shipping implementation.
Complete when the leading name, important alias, behavior, and API/semantic claim have direct authority or are explicitly marked provisional.
Lead with the useful name:
## Likely name: [component or style]
**Confidence:** high | medium | low
**Platform:** [web / macOS / ...]
[One-sentence job and behavior.]
**Why it fits**
- [observed clue]
- [observed clue]
**Do not confuse it with**
- **[nearby pattern]** — [single decisive behavioral difference]
**Verified names**
- User-facing: [name and aliases]
- Semantics/API: [native element, role, property, or framework symbol]
- Primary source: [direct link]
**Prompt-ready wording**
> Build/use a [precise name] that [behavior, state, keyboard, and dismissal rule].
**Unknown**
- [only the unresolved fact that could change the classification]Include a debug prompt only when the user is implementing or repairing the pattern. Stop after identification when implementation was not requested.
Run the deterministic privacy and response-shape tests:
node --test skills/engineering/ui-vocabulary/scripts/search.test.mjsRepresentative trigger cases:
The skill remains probationary until representative screenshot, live-page, and DOM/code cases produce the correct primary-source-backed distinction.
agent-browser — inspect rendered behavior and accessibility state.animated-component-libraries — select an implementation after naming.frontend-design — build the named interface.accessibility — audit semantics and keyboard behavior after implementation.