From grimoire
Replaces instructions and tooltips with visual design that signals how interactive elements behave. Use when reviewing UI for unclear buttons, links, inputs, sliders, or drag handles.
How this skill is triggered — by the user, by Claude, or both
Slash command
/grimoire:apply-affordancesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Design interactive elements so their appearance signals how they behave — without instructions, tooltips, or onboarding required.
Design interactive elements so their appearance signals how they behave — without instructions, tooltips, or onboarding required.
Adopted by: Apple Human Interface Guidelines, Google Material Design, and Microsoft Fluent Design all codify affordance patterns (raised surfaces = pressable, underlines = clickable, cursor changes = draggable) as mandatory standards for their component libraries; IDEO's interaction design curriculum uses Norman's affordance model as the foundational framework Impact: Norman (2013) identifies affordance failures — interactive elements that look decorative, or decorative elements that look interactive — as the primary cause of user errors in digital interfaces; NNG usability studies consistently find that unlabeled affordance violations (flat buttons indistinguishable from text, no hover cursor on clickable areas) account for 15–25% of task failures in unmoderated usability tests Why best: Labels and instructions compensate for missing affordances but require reading; tooltips only appear on hover (unavailable on mobile); affordance-based design communicates function at a glance, in any language, without additional cognitive load — the signifier is the interface
Sources: Gibson "The Ecological Approach to Visual Perception" (Houghton Mifflin, 1979); Norman "The Design of Everyday Things" revised edition (Basic Books, 2013) Ch. 1–2; NNG "Signifiers, Not Affordances" (Norman, 2008)
For each interactive element, state the affordance explicitly:
| Element | Afforded action |
|---|---|
| Button | Press (triggers an action) |
| Link | Navigate (moves to a destination) |
| Input field | Enter text |
| Checkbox | Toggle on/off |
| Slider | Drag to a value |
| Drag handle | Reorder by dragging |
| Expand arrow | Reveal hidden content |
If you cannot name the afforded action in one word, the element's purpose is ambiguous to users too.
A signifier is the visual property that communicates the affordance. Norman's distinction: the affordance is the capability; the signifier is the perceivable signal of it.
Press (button):
pointer on hoverNavigate (link):
pointer on hoverEnter text (input):
Toggle (checkbox / switch):
Drag (handle / reorder):
grab at rest; grabbing during dragEach element must have visually distinct states:
| State | Must be perceivable |
|---|---|
| Default | The element exists and is interactive |
| Hover | Element responds to pointer |
| Focus | Keyboard focus visible (min 3:1 contrast, WCAG 2.4.11) |
| Active/pressed | Element is being activated |
| Disabled | Element is not interactive (reduced opacity + cursor: not-allowed) |
| Loading | Element is processing (spinner inline or disabled state) |
If two states are visually identical, users cannot tell the interface responded.
Screenshot the UI and apply a Gaussian blur (5–8px). Any element that was obviously interactive before blur should remain distinguishable from non-interactive content after blur. If buttons, links, and body text look identical when blurred, signifiers are insufficient.
Hover-only affordances (tooltip, cursor change) are invisible on touch devices. Every interactive element must be identifiable as interactive without hover:
Decorative elements that look interactive damage trust:
Remove decorative signifiers from non-interactive elements, or add the afforded action.
cursor: not-allowed and reduced opacitynpx claudepluginhub jeffreytse/grimoire --plugin grimoireGuides designing interactive elements with clear affordances and signifiers. Applies Norman's principles to buttons, touch targets, and drag-and-drop interactions.
Designs accessible interactive states, transitions, animations, error handling, loading patterns, and feedback for UI elements, covering visual, screen reader, keyboard, and touch interactions.
Designs intentional microinteractions—triggers, rules, feedback, loops, and modes—for UI details like toggles, loading states, form validation, and button feedback.