attention-grabbers — Claude Code skill: animations that pull focus
A skill that tells your coding agent how to build badge pulses, error shakes and feature highlights using Disney's animation principles.
npx skills add dylantarre/animation-principles --skill attention-grabbers -a claude-codeWhat attention-grabbers does
This skill covers motion meant to draw the eye: notification badges, dots, error shakes, new-feature highlights, promo banners. It walks through Disney's 12 principles as they apply here — squash & stretch for a pulsing scale, anticipation before the snap, staging for placement, slow in/slow out so pulses don't feel jerky.
Timing is spelled out in a table: a single attention grab runs 300–500ms, a repeating pulse 2000–3000ms, an urgent one 1000–1500ms, with decay after 3–5 cycles or 10 seconds. Ready-made CSS patterns ship with it: pulse, glow, shake, ring, each with keyframes, plus a JavaScript example using element.animate() that stops itself via setTimeout.
The rules are strict. One attention animation on screen at a time, auto-stop after 3–5 cycles, always a way to dismiss permanently, and a static indicator under prefers-reduced-motion. Urgent alerts need an audio or haptic alternative. If your UI already blinks three badges at once, that's a reason to run this skill and see what it flags.
What it helps with
- pulse a notification badge
- pick timing for an error shake
- highlight a new feature without annoying users
- auto-stop an attention animation
- handle prefers-reduced-motion in attention motion
Example prompts for the agent
- pulse the notification badge using attention-grabbers
- add a shake to the field on validation error
- highlight the new toolbar button, but stop after 6 seconds
How to install attention-grabbers
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill attention-grabbers -a claude-code2Manually: put the files in place
~/.claude/skills/attention-grabbers/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/attention-grabbers/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill attention-grabbers -a codex2Manually: put the files in place
.agents/skills/attention-grabbers/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill attention-grabbers -a cursor2Manually: put the files in place
.cursor/skills/attention-grabbers/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dylantarre/animation-principles attention-grabbers2Manually: put the files in place
.github/skills/attention-grabbers/SKILL.md1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill attention-grabbers -a gemini-cli2Platform CLI
gemini skills install https://github.com/dylantarre/animation-principles --path skills/05-by-animation-type/attention-grabbersManually: put the files in place
.devin/skills/attention-grabbers/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill attention-grabbers -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about attention-grabbers
How do I install attention-grabbers in Claude?
Run npx skills add dylantarre/animation-principles --skill attention-grabbers -a claude-code. The skill lands in ~/.claude/skills/attention-grabbers/SKILL.md.
What does attention-grabbers do?
It guides the agent through building focus-drawing motion: pulses, shakes, glows. It applies Disney's 12 principles and gives timings with CSS examples.
What limits does the skill set?
One attention animation at a time, auto-stop after 3–5 cycles, a permanent dismiss option, and a static indicator under prefers-reduced-motion.
Source text
SKILL.md · MIT
---
name: attention-grabbers
description: Use when drawing user focus - notification badges, new feature highlights, error callouts, promotional banners, or any animation meant to attract attention.
---
# Attention-Grabbing Animations
Apply Disney's 12 principles to focus-drawing motion.
## Principle Application
**Squash & Stretch**: Pulsing scale draws attention. 1.0 → 1.1 → 1.0 cycle catches peripheral vision.
**Anticipation**: Brief pause before attention animation. Let it build then release.
**Staging**: Position attention elements where users will see them. Corner badges, inline highlights.
**Straight Ahead vs Pose-to-Pose**: Design attention states: rest, active/pulsing, acknowledged.
**Follow Through & Overlapping**: Badge pulses, then count updates. Stagger the attention signals.
**Slow In/Slow Out**: Ease in/out on pulses. Smooth oscillation is less jarring than sharp bounces.
**Arcs**: Shake animations follow arc patterns. Left-right with slight vertical oscillation.
**Secondary Action**: Pulse + glow + color shift for maximum attention (use sparingly).
**Timing**:
- Single attention grab: 300-500ms
- Repeating pulse: 2000-3000ms cycle
- Urgent pulse: 1000-1500ms cycle
- Decay: Stop after 3-5 cycles or 10 seconds
**Exaggeration**: This is where exaggeration shines. Scale to 1.2, bright colors, bold motion.
**Solid Drawing**: Attention elements must still feel part of the UI, not floating or detached.
**Appeal**: Attention should feel like helpful notification, not aggressive demand.
## Timing Recommendations
| Attention Type | Duration | Cycles | Decay |
|---------------|----------|--------|-------|
| Badge Pulse | 300ms | 2-3 | Stop after animation |
| Notification Dot | 2000ms | 3 | 6 seconds total |
| New Feature | 500ms | 2 | Stay subtle |
| Error Shake | 400ms | 1 | None |
| Urgent Alert | 1000ms | infinite | Until dismissed |
| Promotional | 3000ms | 2 | 6 seconds |
## Implementation Patterns
```css
/* Pulse attention */
.badge-pulse {
animation: pulse 2000ms ease-in-out 3;
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.15); }
}
/* Subtle glow */
.glow-attention {
animation: glow 2000ms ease-in-out 3;
}
@keyframes glow {
0%, 100% { box-shadow: 0 0 0 0 rgba(59, 130, 246, 0); }
50% { box-shadow: 0 0 0 8px rgba(59, 130, 246, 0.3); }
}
/* Error shake */
.shake {
animation: shake 400ms ease-in-out;
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
20%, 60% { transform: translateX(-8px); }
40%, 80% { transform: translateX(8px); }
}
/* Ring animation (notification) */
.ring {
animation: ring 2500ms ease-in-out 2;
}
@keyframes ring {
0%, 100% { transform: rotate(0); }
10%, 30% { transform: rotate(10deg); }
20%, 40% { transform: rotate(-10deg); }
50%, 100% { transform: rotate(0); }
}
```
## Attention Budget
```javascript
// Auto-stop attention after timeout
const attention = element.animate([
{ transform: 'scale(1)' },
{ transform: 'scale(1.15)' },
{ transform: 'scale(1)' }
], {
duration: 2000,
iterations: 3
});
// Or with CSS
setTimeout(() => {
element.classList.remove('attention');
}, 6000);
```
## Key Rules
1. Maximum 1 attention animation visible at a time
2. Auto-stop after 3-5 cycles (10 seconds max)
3. Provide way to permanently dismiss
4. Never use for non-essential content
5. `prefers-reduced-motion`: static indicator only, no animation
6. Urgent animations must have audio/haptic alternative for accessibility
© dylantarre · MIT · dylantarre/animation-principles