Feel · interactions built on physics
A skill for coding agents. Say how an interaction should feel and your agent builds it on a body with mass, a spring and damping, in a force field. Nothing has a hand-picked duration. Each figure below is the live component beside the motion it just made: the dashed line is what the model predicted, the orange line is what the component did.
npx skills add diip3sh/feel01 · Heavy toggle
02 · Magnetic drawer
03 · Card thrown to a corner
04 · Detented knob
Install
npx skills add diip3sh/feelWhat you install is one folder: the skill, its runtime (one script, one stylesheet and the rig) and four example components. There is no npm install, and Node is only needed for the audit. Or clone it:
git clone https://github.com/diip3sh/feel ~/.claude/skills/feelHow to use it
/feel a toggle that feels heavy, React/feel bottom sheet with three magnetic stops, slightly bouncy- Restart your agent after installing, then type the command with the interaction you want and how it should feel.
- You don't need the command. Ask for something that should feel heavy, snappy, magnetic or thrown and the skill is picked up on its own.
- Out comes the component and a rig like the ones above. The rig exports the same spring to Framer Motion, react-spring, SwiftUI, Compose or CSS.
How it works
- 01Words to physics.
Feel.words("heavy, snappy")returns a mass, a natural frequency and a damping ratio, and from them stiffness and damping. - 02Choose the model. A spring to a target, magnets that catch a coasting body, walls that stop the overshoot, on a line, in a plane or around a dial.
- 03Build on a body. A tap moves the target. A drag pulls through a hand spring, so heavy things lag. A release keeps the real velocity, and the decision comes from where it would coast.
- 04Measure it. The rig draws the path the model predicted, walls and fields included, under what the component did. Switch it to CSS keyframes and each release is baked from the same model and played by the browser.
- 05Audit.
node scripts/audit.mjsfails on any hand-picked duration, easing curve or timer that moves things.
Keys
- Tab
- Focus a figure, its component or a control in its margin
- Space
- Toggle the switch
- 1–4
- Send the drawer to a stop, or the card to a corner
- []
- Step the knob one detent
- ←→↑↓
- Step the focused component
- F
- Flick it