From interaction-and-control-principles
Use this skill when designing structural constraints that prevent invalid actions through the shape, layout, or behavior of the design itself — paths (channels of motion), axes (rotary controls), barriers (blocks). Trigger when designing input controls, drag-and-drop affordances, modal dialogs, or hardware-style structural prevention. Sub-aspect of `constraint`; read that first.
How this skill is triggered — by the user, by Claude, or both
Slash command
/interaction-and-control-principles:constraint-physicalThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Physical constraints prevent invalid actions through the structure of the design — the shape of a connector, the boundary of a screen, the channel of a slider. The user *can't* take the wrong action because the structure rejects it. Stronger than psychological constraints; not always available.
Physical constraints prevent invalid actions through the structure of the design — the shape of a connector, the boundary of a screen, the channel of a slider. The user can't take the wrong action because the structure rejects it. Stronger than psychological constraints; not always available.
Channels that direct motion. The user can move along the path; off-path movement is impossible or rejected.
Software examples:
<!-- Path constraint: value must be 0-100 -->
<input type="range" min="0" max="100" value="50" />
<!-- Path constraint: choice from fixed set -->
<select>
<option>Small</option>
<option>Medium</option>
<option>Large</option>
</select>
Rotary controls. Convert applied force into rotation; effectively infinite range in a small space.
Software examples:
Block, slow, or redirect motion.
Software examples:
<input type="email" /> <!-- only accepts email format -->
<input type="number" min="0" /> <!-- only non-negative numbers -->
<input type="date" /> <!-- only valid dates -->
<input type="color" /> <!-- only valid hex colors -->
The browser enforces the constraint; the user can't submit invalid data.
A drag-and-drop interaction can constrain valid drops at the API level:
dropZone.addEventListener('dragover', e => {
if (isValidTarget(draggedItem, dropZone)) {
e.preventDefault(); // allow drop
}
// not preventing default = drop won't fire
});
The browser's drag-and-drop API itself uses constraint: preventDefault opens the channel; absence keeps it blocked.
<dialog open>
<h2>Required action</h2>
<p>You must complete this step before continuing.</p>
<button onclick="proceed()">Continue</button>
</dialog>
The dialog blocks interaction with the page beneath. Use sparingly; barriers irritate when they don't serve a clear purpose.
<button id="submit" disabled>Submit</button>
The button can't trigger its action until enabled. Pair with explanation of what would enable it.
The discipline: constrain real requirements; explain when surprises occur.
constraint (parent).constraint-psychological — the other half; symbols, conventions, mappings.affordance — affordance + constraint = the action space.accessibility-operable — physical constraints must be operable across assistive technologies.npx claudepluginhub hdeibler/universal-design-principles --plugin interaction-and-control-principlesGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Dispatches multiple subagents concurrently for independent tasks without shared state. Use when facing 2+ unrelated failures or subsystems that can be investigated in parallel.