agentsclimarketplace

U ui brief

Skill zig999/siegard-code/dist/.claude/skills/u-ui-brief

Most AI coding tools help you write code. Siegard Code manages the entire development lifecycle — it writes specifications, plans backlogs, implements features, runs QA, and delivers tested code. All autonomously, all traceable, all through Claude Code.

Install
npx -y skills add zig999/siegard-code --skill u-ui-brief

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Refine a raw UI request into a detailed, standardized, unambiguous brief ready to be handed to /u-spec (new demand) or /u-improve (change to an existing spec). This skill produces the structured input to the pipeline — it does not produce the specification itself and does not invoke leaf agents. Trigger when an author needs to prepare a UI request (component, screen, or flow) before running the spec pipeline.

SKILL.md

15.8 KB, ~3.9k tokens by cl100k_base, as published. Nobody here has run it

SKILL: UI Brief

Purpose

Convert a raw UI request into a structured brief that the /dist spec agents can consume without making implicit decisions. The brief captures intent; the spec pipeline resolves intent into tokens, values, identifiers, and contracts.

This skill does not produce specifications. It produces the input a spec agent needs to produce a specification.


Scope boundary — intent vs. resolution

This skill describes intent. Literal values (hex, px, ms), tokens, fonts, HTTP verbs, payloads, TypeScript types, and component library bindings are resolved by downstream layers, orchestrated by /u-spec or /u-improve.

LayerEntry pointResponsibilityProduces
u-ui-brief (this skill)Intent: what the screen does, which states exist, how the user is servedStructured brief
Spec pipeline/u-spec (new demand)Domain contract, UC, BR, openapi.yaml operationIds, error catalog, front spec, design-system{domain}.spec.md, {domain}.back.md, feature.spec.md, component.spec.md
Improve flow/u-improve (modify existing spec)Classifies impact, writes improve_scope block, delegates to /u-spec fast-track and/or /u-devUpdated specs and/or implementation

The brief is never handed directly to leaf agents (e.g., u-spec-writer, u-spec-front, u-spec-back, u-fe-ui, u-ui-design). Those are invoked internally by the orchestrators behind /u-spec (u-spec-orchestrator) and /u-improve, which manage session logs, mode detection, approval gates, validation, and handoff to /u-dev.

Authoring rule: if a value can be resolved by a downstream layer, describe it by intent — never by literal. Say primary-action — never #2563EB. Say short-feedback — never 150ms. The downstream pipeline resolves per R1–R25 and the project design system.


Core principles

  • Describe behavior, not subjective appearance. States, transitions, conditions — never "looks good".
  • Zero ambiguity. If a downstream agent must decide something the author could have declared, the brief failed.
  • Separate the five layers. Layout, state, behavior, feedback, data — never mixed in one description.
  • Semantic over literal. Describe intent; let tokens and values resolve downstream.
  • General to specific. Screen context → components → states → integration contracts.
  • Structure over narrative. Tables and enumerations over prose.

Required structure

1. Overview

One or two sentences describing the functional purpose. Answer: what does this UI do for the user?

2. Access context

FieldValue
Entry pointhow the user reaches this UI
Preconditionpublic | authenticated | role:{name} | state:{name}
Prior state required— or named prior screen/flow
Route intentsemantic route description (not a final path)

3. Layout and composition

Fill each row. Every answer is semantic; downstream agents resolve to tokens.

AspectDeclare
Visual hierarchysingle dominant element + role of each secondary element + reason
Groupingswhich elements form units; which are standalone
Within-group spacingtight | comfortable | generous
Between-group spacingsection-gap-small | section-gap-medium | section-gap-large
Densitycompact | comfortable | generous
Alignment axisleft | center | right | justified-axis per region
Responsive intentwhat restructures on mobile vs. desktop (layout shape, not px)

Do not prescribe max-width or padding in px. Describe the column width as narrow, standard, or full.

4. Components

One block per component.

4.1 Identification

FieldValue
Namesemantic name
Rolefunctional purpose in this screen
Scopeglobal (reusable) | feature (local)
Classificationnew | existing | variant-of:{name}
Component spec expectedyes (appears in 2+ features or has internal logic) | no

4.2 Default appearance (intent)

Tabular only. No literal values.

AttributeSemantic intent
Surfaceinline | input | card | elevated-card | full-bleed
Borderdefault | emphasized | none
Text roledisplay | heading | subheading | body | label | caption | code
Weight intentnormal | emphasized | metric-bold
Iconnone | leading:{purpose} | trailing:{purpose}
Placeholderexact user-facing text, if applicable
Radius intentsquare | subtle | standard | prominent | pill
Elevation intentflat | raised | floating | modal-level | overlay-level

4.3 States

One row per state. Declare only the semantic delta from default.

StateTriggerSemantic deltaInteractivity
defaultinitial renderfull
hoverpointer overemphasized borderfull
focuskeyboard or pointer focusfocus ring present (R15 mandatory)full
activepress / click instantpressed affordancefull
filledhas valuefull
errorvalidation failserror border + inline helper text (R16, R20)full
successvalidation succeedssuccess affordancefull
disabledprop or contextreduced emphasis; no interactionnone
loadingasync in progressinline indicator (R19)partial

Mandatory: every interactive element must declare all five states default / hover / focus / active / disabled — R15. Declaring them as identical to default is valid; omitting them is not.

4.4 Interactions

Format: [trigger] → [immediate action] → [resulting state].

Example (semantic only):

  • user focuses field → field enters focus
  • blur with invalid value → validation runs → state error with message {exact user-facing text}
  • user edits field in errorerror persists during typing → revalidation on next blur

4.5 Implementation contract (intent)

FieldValue
Identifierkebab-case id
Base typeinput-text | button | select | card | modal | ...
Props intendedsemantic prop names + short purpose — no TypeScript types
Events intendedcallback purposes — not payload types
External dependenciesnamed intent (e.g., email validator, list of categories) — not libraries

Downstream component.spec.md resolves these to TypeScript types and @/ import paths.


5. Data integration

Declare intent. Do not declare HTTP method, path, status codes, or payload JSON.

FieldValue
Domain intendedauth, catalog, billing, ...
Operationcreate | read | update | delete | list | search
Fields in (semantic)user-facing names of inputs
Fields out (semantic)names the UI needs from the response
On successredirect:{target} | inline-update | toast:{tone} | modal:{name}
On error (per class)one row per error class the UI distinguishes
Endpoint statusexisting | endpoint_missing | unknown

If endpoint_missing, the spec agent records it in tc-XX-backend-pending-items.md — do not fabricate an operationId here.


6. User feedback

Every user-visible signal gets a row. Three dimensions are mandatory.

DimensionDeclare
Whatkind (toast | inline | banner | modal | redirect) + tone (success | error | warning | info)
Whereposition intent (top-right floating, below field, above form, full-screen blocking) — not px
Whentrigger + duration intent (instant, auto-dismiss-short, auto-dismiss-long, user-dismissed, persistent)

Error message content: if an exact user-facing text is decided, quote it verbatim. Otherwise write text-source: §6 of feature.spec.md — the spec agent will carry the canonical text.


7. Flows (when multi-screen)

FieldValue
Happy path stepsnumbered; one sentence each; user action or system action
Branches{step}.{letter}: {condition} → {outcome}
Transition intentinstant | short-crossfade | slide-forward | slide-back
Persistence between stepsin-memory | url-param | session | local | none
Reload behaviorrestart-from-step-1 | resume-from-last-step | block-until-complete

The spec agent resolves transition intent to the R23 duration scale.


8. Mandatory behavior decisions

Every row must be answered. Unanswered rows set ready_for_spec_pipeline: false.

DecisionOptions
Debounce on validation / searchnone | short | medium
Retry on network failurenone | auto-once | auto-three | user-prompted
Optimistic updateyes | no
Cache on readnone | inherit | long-lived | on-focus-revalidate
Duplicate clicks during asyncblock-until-response | queue | ignore
Network error vs API errorsame-feedback | differentiated

9. Edge cases

Answer each. not-applicable is valid; silence is not.

  • Empty result / zero records
  • API error with generic body
  • Slow response (perceived long)
  • Malformed or unexpected API shape
  • User navigates away during async
  • Rapid repeated action or double-click
  • Unauthorized session mid-flow
  • Offline or no network

10. Fidelity level

LevelMeaning
lowStructure and behavior correct; visual polish deferred
mediumFull state coverage + design-system tokens applied
highPixel-perfect; all micro-interactions; design system fully calibrated

Controlled vocabulary — intent terms

Use these canonical intent terms. The spec pipeline resolves each to concrete tokens or values per R1–R25 and the project design system.

CategoryIntent termsResolved against
Color roleprimary-action, danger-action, data-highlight, neutral-body, neutral-muted, border-default, border-focus, border-error, surface, elevated-surfacetokens.md
Spacingtight, comfortable, generous, section-gap-small, section-gap-medium, section-gap-largeR1 scale (4/8/12/16/24/32/48/64)
Typography roledisplay, heading, subheading, body, body-sm, label, caption, codeR4 scale (12/14/16/20/24/30)
Motioninstant, short-feedback, medium-transition, long-enterR23 scale (100/200/300/500ms)
Radiussquare, subtle, standard, prominent, pillR13
Elevationflat, raised, floating, modal-level, overlay-leveltokens.md
Densitycompact, comfortable, generousR3 / R17
Feedback tonesuccess, error, warning, infoR20

Anti-patterns — forbidden in a brief

These violate the intent/resolution boundary and must not appear in a brief produced by this skill.

Anti-patternReason
Hex codes (e.g., #2563EB)Color is resolved by tokens.md — R9
Pixel dimensions for spacing, size, or max-widthResolved by R1 / R3 / R18
Explicit ms durationsResolved by R23
Explicit font-size in pxResolved by R4
HTTP method + path inlineOwned by openapi.yaml per feature.spec.md §1
Payload JSON or response bodyContract lives in the schema
Component-library binding (e.g., <Button variant="primary">)Resolved by the implementation pipeline (/u-dev), not by the brief
Subjective adjectives (nice, clean, modern, appropriate, fast, smooth)No deterministic resolution
Invented UI-NN / FL-NN / TC-XX identifiersSpec pipeline mints these — brief uses semantic labels only

Handoff envelope (mandatory output)

Every brief produced by this skill ends with this YAML block. The Markdown body is human-readable; this block is the structured handoff consumed by downstream agents.

ui-brief:
  produced_by: u-ui-brief
  timestamp: <ISO-8601>
  language: en
  layer: ephemeral

  request_summary: <one sentence>

  handoff:
    target_command: /u-spec | /u-improve   # /u-spec for new demand; /u-improve when modifying an existing spec
    reason: <short justification — e.g., "new feature, no prior spec" | "adjusts existing ui-epic-04 states">
    # Downstream routing is owned by the target command's orchestrator.
    # Do NOT invoke leaf agents directly (u-spec-writer, u-spec-front, u-spec-back, u-fe-ui, u-ui-design).

  screens_intended:
    - name: <SemanticScreenName>
      route_intent: <semantic path description>
      access_precondition: public | authenticated | role:<name> | state:<name>
      feature_name_intent: <kebab-case>
      persona_intent: <role name from CLAUDE.md if known>

  states_intended:
    - screen: <SemanticScreenName>
      labels: [idle, loading, success, error, empty, ...]   # semantic; spec agent assigns UI-NN

  flows_intended:
    - id_intent: <semantic flow name>
      spans_screens: [<SemanticScreenName>, ...]
      step_labels: [<entry>, <validation>, <success>, <error-branch>]

  data_intent:
    - domain: <domain-name>
      operation: create | read | update | delete | list | search
      fields_in: [<semantic names>]
      fields_out: [<semantic names>]
      endpoint_status: existing | endpoint_missing | unknown

  components_intended:
    - id: <kebab-case>
      base_type: <input-text | button | select | card | modal | ...>
      scope: global | feature
      classification: new | existing | variant-of:<name>
      has_component_spec_expected: true | false | unknown

  behavior_decisions:
    debounce: none | short | medium
    retry: none | auto-once | auto-three | user-prompted
    optimistic_update: true | false
    cache: none | inherit | long-lived | on-focus-revalidate
    duplicate_clicks: block-until-response | queue | ignore
    error_differentiation: same-feedback | differentiated

  edge_cases:
    empty_result: <answer | not-applicable>
    api_error_generic: <answer>
    slow_response: <answer>
    malformed_response: <answer>
    navigate_away_during_async: <answer>
    rapid_repeated_action: <answer>
    unauthorized_mid_flow: <answer>
    offline: <answer>

  fidelity: low | medium | high

  design_system_status: present | missing | unknown

  open_questions:
    - id: OQ-01
      topic: <short>
      blocking: true | false

  ready_for_spec_pipeline: true | false
  blocking_reasons: []   # populated when ready_for_spec_pipeline=false

Final checklist

  • Overview and access context declared
  • Layout declares hierarchy, groupings, spacing intent, density, responsive intent — no px, no hex
  • Every component has default appearance (intent) + all five R15 states (default/hover/focus/active/disabled) + filled/error/success/loading as applicable
  • State changes declared as semantic delta from default only
  • Implementation contract at intent level — no TypeScript types, no library bindings
  • Data integration by domain + operation + semantic fields — no HTTP/JSON
  • Every user-feedback item has what / where / when
  • All mandatory behavior decisions answered
  • All edge cases answered (including not-applicable)
  • Fidelity level declared
  • Vocabulary is semantic throughout — no hex / px / ms literals, no invented UI-NN / FL-NN / TC-XX
  • Handoff YAML block present and populated
  • ready_for_spec_pipeline: true or blocking_reasons explains why not

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,984. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.