A skill your agent uses whenever the question is whether the user can tell what an element does — whether it looks clickable, draggable, expandable, editable, or interactive at all.
Apache-2.0Auto-check passed
Install Affordance
skills CLI
$ npx skills add hashgraph-online/awesome-codex-plugins --skill affordance -a claude-code
Project install by default; add -g for ~/.claude/skills/.
Install the "affordance" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/HDeibler/universal-design-principles/plugins/interaction-and-control-principles/skills/affordance into .claude/skills/affordance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "affordance", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add hashgraph-online/awesome-codex-plugins --skill affordance -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "affordance" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/HDeibler/universal-design-principles/plugins/interaction-and-control-principles/skills/affordance into .agents/skills/affordance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "affordance", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add hashgraph-online/awesome-codex-plugins --skill affordance -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "affordance" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/HDeibler/universal-design-principles/plugins/interaction-and-control-principles/skills/affordance into .cursor/skills/affordance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "affordance", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add hashgraph-online/awesome-codex-plugins --skill affordance -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "affordance" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/HDeibler/universal-design-principles/plugins/interaction-and-control-principles/skills/affordance into .gemini/skills/affordance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "affordance", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add hashgraph-online/awesome-codex-plugins --skill affordance -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "affordance" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/HDeibler/universal-design-principles/plugins/interaction-and-control-principles/skills/affordance into .github/skills/affordance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "affordance", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add hashgraph-online/awesome-codex-plugins --skill affordance -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "affordance" agent skill from https://github.com/hashgraph-online/awesome-codex-plugins/tree/main/plugins/HDeibler/universal-design-principles/plugins/interaction-and-control-principles/skills/affordance into .opencode/skills/affordance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "affordance", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
affordance
GitHub stars
1.3k
Token cost
~4.2k tokens
SKILL.md length
1,914 words
Files
2 (incl. references)
Skills in repo
714
Repo updated
First seen
Licence
Apache-2.0
At a glance
A skill your agent uses whenever the question is whether the user can tell what an element does — whether it looks clickable, draggable, expandable, editable, or interactive at all.
Works in 5 steps: The squint test. Squint at the screen… → The fresh-user click test. Hand the… → The grayscale test. Convert to… → …
The question is whether the user can tell what an element does — whether it looks clickable
SKILL.md covers Definition (in our own words), Origins and research lineage, Why affordance matters and When to apply, plus 7 more sections
Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
What it does
Affordance is an agent skill from hashgraph-online/awesome-codex-plugins. Use this skill whenever the question is whether the user can tell what an element does — whether it looks clickable, draggable, expandable, editable, or interactive at all. Trigger when designing buttons, links, custom controls, drag handles, draggable cards, editable inline fields, or any interactive element. Trigger on reviews when users hesitate, miss controls, or click on things that aren't interactive. Affordance is one of the most decisive principles in interaction design — Norman placed it at the center of…
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/gibson-norman-and-flat-design.md`).
The repository describes itself as: A curated list of awesome OpenAI Codex / ChatGPT plugins, skills, and resources. The 1 Codex Marketplace. See live plugins at: https://hol.org/plugins/best-codex-plugins. The licence is Apache-2.0.
When your agent uses it
The question is whether the user can tell what an element does — whether it looks clickable
Interactive at all
Designing buttons
Custom controls
Example prompts
“/affordance”
Workflow steps
5 steps, taken from the first numbered list in SKILL.md.
1The squint test. Squint at the screen until detail blurs. Can you still identify which elements are interactive? If everything blurs into…
2The fresh-user click test. Hand the design to someone who hasn't seen it. Watch what they hover and tap. Misses are affordance failures.
3The grayscale test. Convert to grayscale. Affordance that depended on color (a blue link) collapses; you'll see what affordance remains…
4The hover-off test. Disable all hover states. Does the still state still communicate which elements are interactive? If no, you were…
5The keyboard-only test. With Tab, can you reach every interactive element? Are the focus rings visible? Affordance for keyboard users is…
What it can do on your machine
Read from SKILL.md and the folder at commit 9e7b281. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
No scripts in the folder and no shell commands in SKILL.md (its code samples are html and css).
From the folder's file list and the shell code blocks in SKILL.md.
Network
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Affordance loads about 4.2k tokens when it runs, and up to ~6k if it reads all its reference files. Until then it costs about 168 tokens; SKILL.md has 1,914 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~168
When it runs· the whole SKILL.md, loaded when a task matches
~4.2k
With references· SKILL.md plus every file in references/, read only if the agent opens them
~6k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/affordance/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
affordance
description
Use this skill whenever the question is whether the user can tell what an element does — whether it looks clickable, draggable, expandable, editable, or interactive at all. Trigger when designing buttons, links, custom controls, drag handles, draggable cards, editable inline fields, or any interactive element. Trigger on reviews when users hesitate, miss controls, or click on things that aren't interactive. Affordance is one of the most decisive principles in interaction design — Norman placed it at the center of *The Design of Everyday Things* — and it's one of the most violated by modern flat-design conventions that strip the visual cues users rely on.
Affordance
Affordance is the relationship between an object's properties and the actions it makes possible. A door handle affords pulling; a flat plate affords pushing; a button affords pressing; a slider affords sliding. When the affordance matches the intended use, the design works without instruction. When the affordance contradicts the intended use, even a sign saying "PUSH" cannot fully repair it — users still try to pull the handle first.
Definition (in our own words)
Affordance is what an object's appearance, shape, weight, and material tell the user about what they can do with it. The affordance lives partly in the object itself (a button has a graspable shape) and partly in the user's perception of it (a child seeing a button for the first time has a different model than an adult who's seen ten thousand). Designers control the visual and behavioral signals; users bring prior experience. Where the two align, the design "just works"; where they diverge, the user must read, ask, or guess.
Origins and research lineage
James J. Gibson, The Ecological Approach to Visual Perception (Houghton Mifflin, 1979). Gibson coined "affordance" in ecological psychology to describe what an environment offers an animal: a horizontal surface affords standing; a graspable object affords carrying. The concept predates HCI but maps naturally to it.
Donald Norman, The Design of Everyday Things (1988, revised 2013). Translated affordance from Gibson's perceptual psychology into design vocabulary. Norman's iconic example — doors that look like they pull but actually push — became shorthand for affordance failure.
Norman's later refinement — "Signifiers, not affordances" (2008). Norman clarified that what designers actually control are signifiers (visible cues that suggest an action). The affordance is the underlying possibility; the signifier is what tells the user about it. The book's principle covers both, but the distinction matters in fine-grained design discussion.
Lidwell, Holden & Butler (2003) compactly stated the principle as "a property in which the physical characteristics of an object or environment influence its function" and gave the door-handle-vs-flat-plate example as the canonical illustration.
Web/UI affordance research — Bagrow, Tognazzini, and many others have studied how affordance translates to flat 2D screens. The shift from skeuomorphic to flat design (around 2013) reduced traditional affordance signals; subsequent recovery (subtle shadows, hover states, motion) has rebuilt them in less literal forms.
Why affordance matters
Affordance is the fastest comprehension channel a UI has. A user looking at a screen for half a second can tell — preattentively, before reading a single label — which elements are interactive and which are content. Strong affordance lets the user form a working theory of the page in seconds; weak affordance forces them to point at things and watch what happens.
The cost of weak affordance compounds:
Time wasted hovering over non-interactive elements to check.
Time wasted scanning for the interactive element among the inert ones.
Misclicks on things that look interactive but aren't (or vice versa).
Anxiety about what happens when something is clicked.
Eventual learned helplessness — users stop exploring and stick to the obvious paths.
When to apply
Every interactive element must have an affordance signal. This is non-negotiable.
Every non-interactive element must not look interactive. False affordance is as damaging as missing affordance.
Custom controls — when reaching past native HTML elements, you take on responsibility for the affordances those native elements provided for free.
Empty states and onboarding — affordance carries the "what can I do here?" answer before any text does.
Touch surfaces — touch has no hover, so affordance must work in the still state.
When NOT to apply (or when to be careful)
Decorative elements that aren't interactive should not have affordance signals. A "Welcome" banner shouldn't look like a button just because it's prominent.
Disabled controls need anti-affordance — visibly different (lower opacity, different cursor) so users don't try to interact.
Power-user-only controls in dense UIs can have subtler affordance because experts use spatial memory; new-user surfaces need stronger cues.
What the user reads as affordance
Affordance signals fall into a small set of categories:
Shape and outline
A bordered, rectangular shape with text inside reads as a button — across cultures, across years. The convention is so strong that it survives flat design: even a single-line border is enough to communicate "pressable."
Color contrast against context
An element that's a different color than its surroundings reads as set apart, often as interactive. The brand-color CTA is the canonical case.
Depth and elevation
Drop shadows, gradients, raised edges all suggest "pressable object floating above the page." Even subtle elevation (box-shadow: 0 1px 2px rgba(0,0,0,0.05)) is enough to communicate "this is a button, not flat content."
Cursor change
Hover changes the cursor (cursor: pointer) — a strong "this is clickable" signal on desktop. For touch users this doesn't help; pair with visual signals.
Hover and focus state
Color change, shadow shift, slight scale on hover signals "this responds to you." Focus ring on keyboard focus signals "this is interactive and currently selected."
Underline (for links)
Underlined text reads as a link. The convention is so old it predates the web (footnotes in print). Stripping link underlines for aesthetic reasons damages affordance — color alone is weaker, especially for color-blind users.
Iconography
A trash-can icon affords delete; a pencil icon affords edit; a magnifying glass icon affords search. These are learned affordances — they require prior exposure — but conventional icons have become as universal as physical-object affordances were before screens.
Position and grouping
Buttons clustered at the bottom of a card or modal afford "primary actions." A control isolated in the corner of a row affords "this row's options." Position carries affordance through learned UI conventions.
Worked examples
Example 1: button vs. text vs. plain content
html
<!-- Plain content: no affordance, none expected -->
<p>Your account expires in 14 days.</p>
<!-- Link: text-link affordance (color + underline on hover) -->
<p>Your account expires in 14 days. <a href="/billing">Update billing</a></p>
<!-- Button: button affordance (shape + background) -->
<p>Your account expires in 14 days.</p>
<button class="btn-primary">Update billing</button>
The plain <p> reads as content. The <a> reads as a link via color + underline. The <button> reads as a button via shape + color + cursor + hover.
Example 2: clickable card
A common modern pattern: a card that's entirely clickable. The challenge: a card looks like content by default; making it clickable requires explicit signals.
html
<a href="/projects/acme" class="card-link">
<article class="project-card">
<h3>Acme Project</h3>
<p>Q4 marketing site refresh</p>
<p class="meta">3 open tasks · Due May 15</p>
</article>
</a>
The card's affordance: subtle border in the still state (suggesting "object, not flat content"), strong response on hover (border color, shadow lift, slight upward translate). Without those state changes, the card looks identical to a non-clickable info panel.
Example 3: drag handle
A drag handle is a deliberately-novel control; its affordance must teach the user.
The signals: the six-dot icon (an established convention), cursor: grab (signals "you can pick this up"), and a hover state to confirm the control responds.
Example 4: editable inline text
A field that becomes editable on click — useful but affordance-fragile because the field looks like static text by default.
Hover signals "you can interact" via the dashed underline. Focus locks in via solid color. Without these, users don't realize the heading is editable until they accidentally click and panic.
Example 5: anti-affordance for disabled controls
html
<button class="btn-primary" disabled>Save (no changes)</button>
The disabled state visibly removes affordance: lighter color (recedes), cursor: not-allowed (signals impossibility), no hover response. Pair with a label or tooltip explaining why it's disabled — disabled affordance tells the user they can't, but not why.
Show full SKILL.md (750 more words)Show less
Cross-domain examples
Door handles vs. push plates
Norman's canonical example. A vertical handle says "grab and pull." A horizontal flat plate says "push here." A door that requires pushing but has a handle is a false affordance — even with a "PUSH" sign, users will instinctively pull first. Better: replace the handle with a plate or bar shape.
Industrial control design
Knobs afford turning. Switches afford flipping. Sliders afford sliding. Buttons afford pressing. Industrial designers select control types based on the action's semantics; mismatches create slips even with experienced operators.
Lego bricks
Lego bricks afford stacking. The studs on top mate with the cavities on the bottom of the next brick. The shape teaches the assembly system — children figure out plugging without instruction because the shapes are unambiguous.
Children's toys
A shape-sorter teaches affordance: square hole takes square block; round hole takes round block. The mismatched attempts fail visibly; the matched attempts succeed satisfyingly. This is affordance pedagogy in physical form.
Software desktop metaphors
The original desktop metaphor (Xerox Star, Mac) borrowed affordance from physical desktops. Folders look like folders; trash looks like trash. The metaphor teaches the affordance via familiarity. Modern flat design has stripped the literal mimicry while retaining the structural affordances (folders are still containers; trash is still a destination).
Anti-patterns
The flat-design no-affordance trap. A "minimalist" UI where buttons have no border, no background, no cursor change. Users can't tell what's interactive without trial-and-error.
The mystery card. Cards on a dashboard that are sometimes clickable and sometimes not, with no visual difference between the two states. Users learn to suspect everything.
Style-only links. Links that have only a slight color difference from body text — no underline, no hover affordance change. Color-blind users see no difference.
Hover-only affordance on touch. Affordance signals that only appear on hover fail entirely on touch devices. Build affordance into the still state.
Fake affordance. A page header that looks like a button (bordered, raised) but isn't clickable. Users tap; nothing happens; trust erodes.
Inconsistent affordance. Buttons that look like buttons in one place and like links in another, for the same action role. Each place is a re-learning.
Custom controls without inherited affordance. Building a <div onclick> instead of <button> strips the native affordance signals (cursor, focus, keyboard activation). You must rebuild them all manually.
Heuristics
The squint test. Squint at the screen until detail blurs. Can you still identify which elements are interactive? If everything blurs into the same shapes, affordance is too weak.
The fresh-user click test. Hand the design to someone who hasn't seen it. Watch what they hover and tap. Misses are affordance failures.
The grayscale test. Convert to grayscale. Affordance that depended on color (a blue link) collapses; you'll see what affordance remains. Robust affordance survives grayscale.
The hover-off test. Disable all hover states. Does the still state still communicate which elements are interactive? If no, you were leaning on hover too much.
The keyboard-only test. With Tab, can you reach every interactive element? Are the focus rings visible? Affordance for keyboard users is the focus ring; missing rings = missing affordance for them.
Related principles
constraint — affordance and constraint are complementary: affordance suggests what can be done; constraint blocks what can't. Both work together.
mapping — affordance signals what an element does; mapping signals what it affects.
mimicry — borrowing affordance from familiar physical or digital objects.
wayfinding — interactive elements with affordance are wayfinding cues.
feedback-loop — once acted on, the element gives feedback confirming the action.
consistency — affordance only works when the same shape always means the same action.
accessibility-perceivable — affordance must be perceivable across abilities; color-only affordance fails colorblind users.
hierarchy — primary actions need stronger affordance than secondary; emphasis economy applies.
Sub-aspect skills
affordance-signifiers — Norman's later refinement: the visual cues designers control to make affordances perceivable. When the underlying affordance exists but the signifier is missing, the user doesn't know.
affordance-false-and-anti — false affordance (looks interactive but isn't) and anti-affordance (deliberately signals "you can't do this here"). Both are crucial counterparts to standard affordance design.
Closing
Affordance is the principle that decides whether your UI is intuitive or has to be taught. Strong affordance is invisible — users just know what to click — and weak affordance is the silent reason support tickets ask "how do I X?" when X is right there on the screen. Build affordance into the still state, layer on the response states, and audit every interactive element for whether someone seeing it for the first time would recognize it as interactive.
SKILL.md and 1 other file (references) in plugins/HDeibler/universal-design-principles/plugins/interaction-and-control-principles/skills/affordance of hashgraph-online/awesome-codex-plugins.
Affordance next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Affordance compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
Affordance this skillhashgraph-online/awesome-codex-plugins
1.3k
—
~4.2k
Automated safety check: Pass
Apache-2.0
Five Questionsbrycewang-stanford/Auto-Empirical-Research-Skills
Deeply analyze any empirical economics PDF using the five-question framework (五问框架): research question, identification strategy, core estimand, robustness logic, and scholarly contribution.
A skill your agent uses when adding, changing, testing, or debugging Rust HTTP APIs and services, especially when Codex needs black-box integration tests, random-port app startup, real database test…
Make a studio's game look like something at build time — a cover from a real frame of the game (free), painted covers, backdrops, textures and character plates from image models through the…
Balance game difficulty, resources, rewards, probability, progression, economies, and dominant strategies.
1.3k GitHub stars~618 tokensUpdated today
Auto-check passed
Questions about Affordance
What does Affordance do?
A skill your agent uses whenever the question is whether the user can tell what an element does — whether it looks clickable, draggable, expandable, editable, or interactive at all. Affordance is an agent skill from hashgraph-online/awesome-codex-plugins. Use this skill whenever the question is whether the user can tell what an element does — whether it looks clickable, draggable, expandable, editable, or interactive at all.
When should I use Affordance?
Affordance fits situations like: the question is whether the user can tell what an element does — whether it looks clickable; interactive at all; designing buttons; custom controls.
How do I install Affordance in Claude Code?
Run `npx skills add hashgraph-online/awesome-codex-plugins --skill affordance -a claude-code`. Or copy the skill folder (plugins/HDeibler/universal-design-principles/plugins/interaction-and-control-principles/skills/affordance in hashgraph-online/awesome-codex-plugins) into .claude/skills/affordance in your project. Claude Code loads it when a task matches its description.
How do I install Affordance in Codex?
Run `npx skills add hashgraph-online/awesome-codex-plugins --skill affordance -a codex`. Or copy the skill folder (plugins/HDeibler/universal-design-principles/plugins/interaction-and-control-principles/skills/affordance in hashgraph-online/awesome-codex-plugins) into .agents/skills/affordance in your project. Codex loads it when a task matches its description.
Can I use Affordance in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hashgraph-online/awesome-codex-plugins --skill affordance -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/affordance, .gemini/skills/affordance, .github/skills/affordance and .opencode/skills/affordance in your project.
What does Affordance need to run?
SKILL.md names no scripts, command-line tools or credentials: Affordance is instructions for the agent only.
Does Affordance access the network?
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Is Affordance safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Affordance use?
Affordance is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Affordance use?
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.8k tokens, read only when the agent opens those files.
What are the alternatives to Affordance?
Skills that share tags, products or a category with Affordance: Five Questions (brycewang-stanford/Auto-Empirical-Research-Skills, 4.5k stars), Discovery Question Form (nexu-io/open-design, 100k stars), Ask User Question (MemTensor/MemOS, 12k stars) and Bar Prep Questions (anthropics/claude-for-legal, 9.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Affordance?
hashgraph-online (a GitHub organization) maintains it in hashgraph-online/awesome-codex-plugins, which has 1,255 GitHub stars. The repository holds 714 skills in this directory. The repository was last updated on October 9, 2026.