Agent skill
spec-ui-component
Generates a rigorous, engineering-ready specification for a UI component. Focuses on strict API contracts (TypeScript), deterministic state logic (Mermaid), and verifiability (Gherkin). Use when designing new UI components or documenting existing ones.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/spec-ui-component
SKILL.md
When to use this skill
- User asks to design a new UI component or create a component spec.
- User asks to document a component's API, state machine, or behavior.
- User needs a bridge between product requirements and frontend implementation.
- User wants to define strict contracts before implementing a component.
This skill is ideal for:
- Designing complex interactive components (forms, modals, data tables).
- Establishing clear API contracts between parent and child components.
- Documenting edge cases and error states before implementation.
- Creating testable behavioral specifications.
Input Schema
When invoking this skill, provide:
component:
name: string # PascalCase component name
type: "atom" | "molecule" | "organism" | "page"
responsibility: string # One-sentence description of what it does
context:
product_area: string # Where this component lives (e.g., "Settings Page")
user_role: string # Target user (e.g., "Admin", "End User")
constraints:
tech_stack: string # (optional) e.g., "React + Zustand"
performance: string # (optional) e.g., "High latency network"
permissions: string # (optional) e.g., "Role-based access"
Execution Rules
1. Define Contract (The Interface)
- Use TypeScript syntax strictly.
- Define
Props(Inputs) andEvents(Outputs). - Explicitly annotate State Ownership in comments:
[Controlled]: Owned by parent/server.[Local]: Internal UI state.[Computed]: Derived from props/state.
- Do NOT implement the logic, only the type signature.
2. Define Logic (The Machine)
- Use Mermaid.js (
stateDiagram-v2). - Focus on the Finite State Machine (FSM):
- Valid States (e.g., Idle, Loading, Error, Success).
- Transitions (Triggered by User or System).
- Guard conditions (e.g.,
if data > 0).
- Do NOT use Flowcharts; use State Diagrams.
3. Define Scenarios (The Tests)
- Use Gherkin-lite syntax (Given / When / Then).
- Focus strictly on Edge Cases identified in constraints:
- Network failures / Latency.
- Permission denials.
- Empty states / Partial data.
- Concurrent user actions.
Output Format (Strict)
Output must be a single Markdown document containing exactly these three sections:
Section 1: Component Contract
interface {ComponentName}Props {
// [Controlled] Description
propName: Type;
}
interface {ComponentName}State {
// [Local] Description
stateName: Type;
}
interface {ComponentName}Events {
// Event callbacks
onEvent: (payload: Type) => void;
}
Section 2: State Logic
stateDiagram-v2
[*] --> InitialState
InitialState --> NextState: Trigger
NextState --> FinalState: Condition
Section 3: Behavioral Scenarios
- Scenario: [Name]
- Given initial condition
- When user action or system event
- Then expected outcome
Example
Input:
component:
name: "SmartSaveButton"
type: "molecule"
responsibility: "Debounce user input and save to server with optimistic updates."
context:
product_area: "Settings Page"
user_role: "End User"
constraints:
performance: "High latency network"
Output:
1. Component Contract
interface SmartSaveButtonProps {
// [Controlled] The actual value to save
value: any;
// [Computed] Dirty state (value !== initialValue)
isDirty: boolean;
// [Controlled] External save handler
onSave: (val: any) => Promise<void>;
}
interface SmartSaveButtonState {
// [Local] Optimistic UI state
optimisticStatus: 'idle' | 'saving' | 'saved' | 'error';
}
2. State Logic
stateDiagram-v2
[*] --> Idle
Idle --> Saving: User Click (Debounced)
state Saving {
[*] --> OptimisticUpdate
OptimisticUpdate --> AwaitServer
}
AwaitServer --> Saved: 200 OK
AwaitServer --> Error: 500 / Timeout
Saved --> Idle: After 3s
Error --> Idle: User Retry
3. Behavioral Scenarios
-
Scenario: Rapid Clicking
- Given the button is in 'Saving' state
- When user clicks again immediately
- Then the click should be ignored (disabled) to prevent race conditions.
-
Scenario: Network Timeout
- Given server takes > 10s to respond
- When timeout threshold is reached
- Then revert optimistic UI AND show toast error.
Output Location
Save generated specs to: doc/specs/{component-name}-spec.md
Requirements
- TypeScript knowledge for contract definitions.
- Mermaid.js for state diagram rendering.
- Understanding of component state ownership patterns.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?