10 proven viral video hook templates with FFmpeg implementations for maximum first-3-second retention. PROACTIVELY activate for: (1) Video hook creation, (2) Opening sequence optimization, (3) Attention-grabbing techniques, (4) Pattern interrupt effects, (5) Curiosity gap implementation, (6) Text overlay hooks, (7) Visual hook effects, (8) Audio hook strategies, (9) Retention optimization, (10) Scroll-stopping content. Provides: Research-backed hook formulas, FFmpeg filter implementations, psychological triggers, platform-specific hooks, A/B testing workflows, and real-world examples with measurable impact.
/plugin marketplace add JosiahSiegel/claude-plugin-marketplace/plugin install ffmpeg-master@claude-plugin-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes (\) in file paths, NOT forward slashes (/).
NEVER create new documentation files unless explicitly requested by the user.
The Critical Window: You have 1.3-3 seconds to stop the scroll. Research shows:
| Hook Type | Duration | Reasoning |
|---|---|---|
| Pattern Interrupt (visual) | 0.3-0.5s | Quick shock, then content |
| Pattern Interrupt (text) | 1.0-1.5s | Time to read "STOP" etc |
| Curiosity Gap | 2.0-3.0s | Two-part reveal timing |
| Direct Challenge | 1.5-2.5s | Read + process + react |
| Transformation Tease | 2.0-3.0s | Before/after comparison |
| Question Hook | 1.5-2.0s | Read + mental engagement |
All FFmpeg filter expressions use SECONDS with decimals:
| Expression | Meaning | Example Use |
|---|---|---|
t | Current time | enable='lt(t,2)' = first 2 seconds |
between(t,0,2.5) | Time range | Hook visible for 2.5s |
if(lt(t,1),expr1,expr2) | Conditional | Different effect in first second |
sin(t*10) | Oscillation | 10 cycles per second |
exp(-t*3) | Decay | Quick fade (3 = fast decay) |
# Hook window timing breakdown:
# 0.0-0.3s: Visual impact (flash, zoom, color)
# 0.3-1.5s: Primary hook text appears
# 1.0-2.5s: Secondary text/elaboration
# 2.5-3.0s: Transition to main content
# Example: Complete hook with timed elements
ffmpeg -i input.mp4 \
-vf "
eq=brightness='0.2*between(t,0,0.2)',
drawtext=text='STOP':fontsize=80:fontcolor=red:x=(w-tw)/2:y=h*0.12:enable='between(t,0.2,1.5)',
drawtext=text='This changes everything':fontsize=48:fontcolor=white:x=(w-tw)/2:y=h*0.20:enable='between(t,1.0,2.8)'
" \
output_timed_hook.mp4
Psychology: Breaks viewer's passive scrolling state with unexpected visual/audio
Best For: All content types, especially saturated niches
FFmpeg Implementation:
# Flash/brightness pulse at start (0.5 seconds)
ffmpeg -i input.mp4 \
-vf "eq=brightness='0.3*between(t,0,0.1)+0.2*between(t,0.1,0.2)+0.1*between(t,0.2,0.3)'" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_pattern_interrupt.mp4
# Zoom punch effect - 1.5x to 1.0x zoom over 0.5s at 60fps for maximum impact
# 50% initial zoom (1.5x) is highly visible on mobile, completes within 0.5s attention window
# Note: d=1 ensures continuous per-frame processing; the time conditional limits zoom to first 0.5s
ffmpeg -i input.mp4 \
-vf "fps=60,zoompan=z='if(lt(t,0.5),1.5-t,1)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1080x1920" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_zoom_punch.mp4
# Glitch effect burst (first 0.5s)
ffmpeg -i input.mp4 \
-vf "rgbashift=rh=-5:rv=5:gh=3:gv=-3:bh=-2:bv=2:enable='lt(t,0.5)',chromashift=cbh=3:cbv=3:crh=-3:crv=-3:enable='lt(t,0.5)'" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_glitch_hook.mp4
Text Overlay Example:
# "STOP." appearing suddenly
ffmpeg -i input.mp4 \
-vf "drawtext=text='STOP.':fontsize=120:fontcolor=red:borderw=5:bordercolor=white:x=(w-tw)/2:y=(h-th)/2:enable='between(t,0,1.5)'" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_stop_hook.mp4
Psychology: Creates information deficit that viewer must resolve by watching
Best For: Educational, storytelling, reveals
Templates:
FFmpeg Implementation:
# Two-part curiosity hook
ffmpeg -i input.mp4 \
-vf "
drawtext=text='What happens next':fontsize=56:fontcolor=white:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.35:enable='between(t,0,1.5)',
drawtext=text='will SHOCK you...':fontsize=64:fontcolor=yellow:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.45:enable='between(t,0.8,2.5)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_curiosity.mp4
# Animated reveal text
ffmpeg -i input.mp4 \
-vf "
drawtext=text='The truth about...':fontsize=48:fontcolor=white:borderw=3:bordercolor=black:x=(w-tw)/2:y=h*0.15:alpha='if(lt(t,0.5),t*2,1)':enable='lt(t,3)',
drawtext=text='[REVEALED]':fontsize=72:fontcolor=red:borderw=4:bordercolor=white:x=(w-tw)/2:y=h*0.25:enable='between(t,1.5,3)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_reveal.mp4
Psychology: Triggers ego/identity response, forces engagement
Best For: Hot takes, controversial opinions, niche content
Templates:
FFmpeg Implementation:
# Direct address hook
ffmpeg -i input.mp4 \
-vf "
drawtext=text='STOP SCROLLING':fontsize=72:fontcolor=red:borderw=5:bordercolor=white:x=(w-tw)/2:y=h*0.12:enable='between(t,0,2)',
drawtext=text='if you want to':fontsize=48:fontcolor=white:borderw=3:bordercolor=black:x=(w-tw)/2:y=h*0.20:enable='between(t,0.5,2)',
drawtext=text='[YOUR BENEFIT]':fontsize=56:fontcolor=yellow:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.27:enable='between(t,1,2.5)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_challenge.mp4
Psychology: Shows result first, creates desire to learn how
Best For: Before/after, tutorials, product demos
Templates:
FFmpeg Implementation:
# Split screen before/after teaser
ffmpeg -i before.mp4 -i after.mp4 \
-filter_complex "
[0:v]scale=540:1920,crop=540:960:0:480[left];
[1:v]scale=540:1920,crop=540:960:0:480[right];
[left][right]hstack=inputs=2[v];
[0:a][1:a]amix=inputs=2[a]
" \
-map "[v]" -map "[a]" \
-c:v libx264 -preset fast -crf 23 \
-t 3 \
output_transform_tease.mp4
# Before label then after reveal
ffmpeg -i input.mp4 \
-vf "
drawtext=text='BEFORE':fontsize=72:fontcolor=red:borderw=4:bordercolor=white:x=(w-tw)/2:y=h*0.10:enable='between(t,0,1.5)',
drawtext=text='AFTER':fontsize=72:fontcolor=green:borderw=4:bordercolor=white:x=(w-tw)/2:y=h*0.10:enable='between(t,2,3.5)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_before_after.mp4
Psychology: Triggers skepticism that must be resolved by watching
Best For: Tutorials, hacks, revelations
Templates:
FFmpeg Implementation:
# Bold claim with emphasis
ffmpeg -i input.mp4 \
-vf "
drawtext=text='This ONE thing':fontsize=56:fontcolor=white:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.12:enable='between(t,0,1.5)',
drawtext=text='changed EVERYTHING':fontsize=64:fontcolor=yellow:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.20:enable='between(t,0.8,2.5)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_bold_claim.mp4
Psychology: Challenges existing beliefs, triggers cognitive dissonance
Best For: Educational, myth-busting, industry secrets
Templates:
FFmpeg Implementation:
# Myth vs Reality hook
ffmpeg -i input.mp4 \
-vf "
drawtext=text='MYTH':fontsize=64:fontcolor=red:borderw=4:bordercolor=white:x=w*0.25-(tw/2):y=h*0.12:enable='between(t,0,1.5)',
drawtext=text='vs':fontsize=48:fontcolor=white:x=(w-tw)/2:y=h*0.12:enable='between(t,0.5,1.5)',
drawtext=text='REALITY':fontsize=64:fontcolor=green:borderw=4:bordercolor=white:x=w*0.75-(tw/2):y=h*0.12:enable='between(t,0,1.5)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_counter_intuitive.mp4
Psychology: Leverages herd mentality and FOMO
Best For: Product reviews, recommendations, trending topics
Templates:
FFmpeg Implementation:
# Stats-based social proof
ffmpeg -i input.mp4 \
-vf "
drawtext=text='10 MILLION people':fontsize=56:fontcolor=white:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.10:enable='between(t,0,2)',
drawtext=text='are using this wrong':fontsize=48:fontcolor=yellow:borderw=3:bordercolor=black:x=(w-tw)/2:y=h*0.18:enable='between(t,0.8,2.5)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_social_proof.mp4
Psychology: Creates artificial scarcity, triggers fear of missing out
Best For: Trends, limited offers, news, seasonal content
Templates:
FFmpeg Implementation:
# Urgent countdown style
ffmpeg -i input.mp4 \
-vf "
drawtext=text='DO THIS NOW':fontsize=72:fontcolor=red:borderw=5:bordercolor=white:x=(w-tw)/2:y=h*0.10:enable='between(t,0,2)',
drawtext=text='before it\\'s too late':fontsize=48:fontcolor=yellow:borderw=3:bordercolor=black:x=(w-tw)/2:y=h*0.18:enable='between(t,0.8,2.5)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_urgency.mp4
Psychology: Triggers narrative engagement, emotional investment
Best For: Personal stories, case studies, testimonials
Templates:
FFmpeg Implementation:
# Story opener with fade-in text
ffmpeg -i input.mp4 \
-vf "
drawtext=text='3 months ago...':fontsize=56:fontcolor=white:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.15:alpha='if(lt(t,1),t,1)':enable='lt(t,3)',
drawtext=text='everything changed':fontsize=48:fontcolor=yellow:borderw=3:bordercolor=black:x=(w-tw)/2:y=h*0.23:alpha='if(lt(t-1,1),max(0,t-1),1)':enable='between(t,1,3)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_story.mp4
Psychology: Activates problem-solving brain, demands mental engagement
Best For: Educational, listicles, Q&A content
Templates:
FFmpeg Implementation:
# Question with reveal
ffmpeg -i input.mp4 \
-vf "
drawtext=text='Have you ever wondered':fontsize=48:fontcolor=white:borderw=3:bordercolor=black:x=(w-tw)/2:y=h*0.12:enable='between(t,0,1.5)',
drawtext=text='WHY this happens?':fontsize=56:fontcolor=yellow:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.20:enable='between(t,0.8,2.5)'
" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_question.mp4
# Subtle shake for emphasis
ffmpeg -i input.mp4 \
-vf "crop=1060:1900:(10+10*sin(t*30)):(10+10*cos(t*25)):enable='lt(t,1)',scale=1080:1920" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_shake.mp4
# Rhythmic zoom pulse - 8% amplitude at ~2Hz for 1.5s (60% more visible than 5%)
# sin(t*12) = 12 rad/s = 1.91 Hz oscillation. Completes before 1.3-second decision point
# Note: 60fps ensures smooth motion; d=1 for continuous per-frame processing
ffmpeg -i input.mp4 \
-vf "fps=60,zoompan=z='if(lt(t,1.5),1+0.08*sin(t*12),1)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1080x1920" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_zoom_pulse.mp4
# Red flash then normal
ffmpeg -i input.mp4 \
-vf "colorbalance=rs=0.5:gs=-0.2:bs=-0.2:enable='lt(t,0.3)',colorbalance=rs=0.3:enable='between(t,0.3,0.5)'" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_color_flash.mp4
# Dark vignette that opens up
ffmpeg -i input.mp4 \
-vf "vignette=PI*min(t,2)/2" \
-c:v libx264 -preset fast -crf 23 \
-c:a copy \
output_vignette_reveal.mp4
#!/bin/bash
# generate_hook_variants.sh - Create multiple hook versions for testing
INPUT="$1"
BASE=$(basename "$INPUT" .mp4)
# Variant A: Curiosity Gap
ffmpeg -i "$INPUT" \
-vf "drawtext=text='Wait for it...':fontsize=64:fontcolor=yellow:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.15:enable='between(t,0,2)'" \
-c:v libx264 -preset fast -crf 23 -c:a copy \
"${BASE}_hook_A.mp4" &
# Variant B: Direct Challenge
ffmpeg -i "$INPUT" \
-vf "drawtext=text='STOP SCROLLING':fontsize=72:fontcolor=red:borderw=5:bordercolor=white:x=(w-tw)/2:y=h*0.12:enable='between(t,0,2)'" \
-c:v libx264 -preset fast -crf 23 -c:a copy \
"${BASE}_hook_B.mp4" &
# Variant C: Question Hook
ffmpeg -i "$INPUT" \
-vf "drawtext=text='Did you know?':fontsize=56:fontcolor=white:borderw=4:bordercolor=black:x=(w-tw)/2:y=h*0.15:enable='between(t,0,2)'" \
-c:v libx264 -preset fast -crf 23 -c:a copy \
"${BASE}_hook_C.mp4" &
wait
echo "Generated 3 hook variants for A/B testing"
ls -la "${BASE}_hook_*.mp4"
| Hook Type | Avg Stop Rate | Best Content Type | Risk Level |
|---|---|---|---|
| Pattern Interrupt | 85% | All | Low |
| Curiosity Gap | 78% | Educational | Low |
| Direct Challenge | 75% | Opinion/Niche | Medium |
| Transformation | 80% | Tutorial/Demo | Low |
| Bold Claim | 72% | How-to | Medium |
| Counter-Intuitive | 70% | Educational | Medium |
| Social Proof | 68% | Reviews | Low |
| Urgency | 65% | Trending/News | High |
| Storytelling | 82% | Personal/Brand | Low |
| Question | 74% | Educational | Low |
| Platform | Best Hooks | Avoid |
|---|---|---|
| TikTok | Pattern Interrupt, Curiosity Gap, Direct Challenge | Long text hooks |
| YouTube Shorts | Transformation, Question, Storytelling | Clickbait-y urgency |
| Instagram Reels | Social Proof, Transformation, Bold Claim | Too promotional |
| Facebook Reels | Storytelling, Social Proof, Question | Youth slang |
Based on viewer psychology research and platform algorithm analysis:
| Platform | Hook Zoom | Hook Duration | Continuous Zoom | FPS | Reasoning |
|---|---|---|---|---|---|
| TikTok | 1.5x (50%) | 0.4-0.5s | +0.2%/sec | 60 | Mobile screens need strong motion |
| YouTube Shorts | 1.5x (50%) | 0.5-0.6s | +0.15%/sec | 60 | Larger screens (TV), subtler zoom |
| Instagram Reels | 1.4x (40%) | 0.5-0.6s | +0.18%/sec | 60 | Balance for mobile + tablet |
Science: 50% initial zoom (1.5x) is minimum perceptible motion on mobile screens. Less than 40% zoom appears static in first 0.5s.
| Movement Type | Distance | Duration | Velocity | Visibility |
|---|---|---|---|---|
| Hook pan | 10-15% frame | 0.4-0.6s | Fast | High |
| Subtle pan | 5% frame | 2-3s | Slow | Medium (background motion) |
| Reveal pan | 20-30% frame | 0.6-0.8s | Very fast | Maximum (attention grab) |
| Tilt up | 10-15% frame | 0.5-0.7s | Medium | Medium (power/scale) |
| Tilt down | 10-15% frame | 0.5-0.7s | Medium | Low (diminish subject) |
Best practices:
| Effect | Peak Brightness | Duration | Pattern | Use Case |
|---|---|---|---|---|
| Pattern interrupt | +30% | 0.2-0.3s | Single pulse | Hook opening |
| Beat sync flash | +20% | 0.1s | Rhythmic (4-6 Hz) | Music sync |
| Attention grab | +40% | 0.15s | Double pulse | Mid-video re-engagement |
| Strobe effect | +50% | 0.05s on, 0.05s off | 10 Hz | High-energy content (use sparingly) |
Warning: Avoid >10% brightness change for >0.5s (eye strain). Flashing >3Hz can trigger photosensitivity.
| Effect | Amplitude | Frequency | Duration | Use Case |
|---|---|---|---|---|
| Subtle engagement | 3-5px | 25-30 Hz | Continuous | Background motion |
| Hook shake | 10-15px | 30 Hz | 0.3-0.5s | Pattern interrupt |
| Impact shake | 20-30px | 40 Hz | 0.2-0.3s | Beat drop, reveal |
| Handheld simulation | 2-4px | 5-8 Hz | Continuous | Authentic feel |
| Effect | Start Speed | End Speed | Duration | Use Case |
|---|---|---|---|---|
| Slow-mo reveal | 1.0x → 0.3x | 0.5-1.0s | Dramatic moment | |
| Speed up | 1.0x → 2.0x | 0.3-0.5s | Transition, montage | |
| Freeze frame | 1.0x → 0.0x | 0.2s | Pause for text overlay | |
| Ramp to normal | 0.5x → 1.0x | 0.4-0.6s | Resume action |
# 1.5x zoom over 0.5s at 60fps (optimal hook):
# Always use d=1 for continuous processing; time conditional limits effect duration
fps=60,zoompan=z='if(lt(t,0.5),1.5-t,1)':d=1:s=1080x1920
# 10% pan over 0.4s (attention-grabbing movement):
crop=ih*9/16:ih:'(iw-ih*9/16)/2 + (iw*0.1)*min(t/0.4,1)':0
# 30% brightness flash for 0.3s:
eq=brightness='0.3*between(t,0,0.3)'
# 8% zoom pulse at ~2Hz (sin(t*12) = 12 rad/s = 1.91 Hz):
fps=60,zoompan=z='if(lt(t,1.5),1+0.08*sin(t*12),1)':d=1:s=1080x1920
# 10px shake at 30Hz for 0.4s:
crop=1060:1900:(10+10*sin(t*30)):(10+10*cos(t*25)):enable='lt(t,0.4)',scale=1080:1920
# Slow-mo 1x to 0.3x over 0.8s:
setpts='if(lt(t,0.8),PTS/(1-0.875*t/0.8),PTS/0.3)'
| Color Treatment | Engagement Boost | Best For | Avoid For |
|---|---|---|---|
| High saturation | +23% | Product showcases, lifestyle | Skin tones (looks unnatural) |
| Orange & teal | +18% | Cinematic, storytelling | Authentic/raw content |
| High contrast | +15% | Mobile viewing, text readability | Subtle/artistic content |
| Vibrant/punchy | +27% | TikTok, Reels | Professional/corporate |
| Moody/desaturated | +12% | Storytelling, documentaries | High-energy content |
# Red flash in first 0.3s (danger/urgency response)
ffmpeg -i input.mp4 \
-vf "colorbalance=rs=0.5:gs=-0.3:bs=-0.3:enable='lt(t,0.3)'" \
-c:v libx264 -preset medium -crf 22 \
output_red_flash.mp4
# Saturation burst (grab attention)
ffmpeg -i input.mp4 \
-vf "eq=saturation='if(lt(t,0.4),1+0.8*t/0.4,1.8)':enable='lt(t,2)'" \
-c:v libx264 -preset medium -crf 22 \
output_saturation_burst.mp4
# Full viral color treatment - punchy, saturated, mobile-optimized
ffmpeg -i input.mp4 \
-vf "\
eq=saturation=1.2:contrast=1.18:brightness=-0.01:gamma=1.05,\
colorbalance=rs=0.08:bs=-0.06,\
curves=all='0/0.01 0.25/0.28 0.5/0.52 0.75/0.76 1/0.99',\
unsharp=5:5:0.7\
" \
-c:v libx264 -preset medium -crf 22 \
output_viral_grade.mp4
Parameters explained:
saturation=1.2: 20% boost for mobile screenscontrast=1.18: Punchier blacks/whitesbrightness=-0.01: Slight crush (prevents washed-out look)gamma=1.05: Lift midtones slightlycolorbalance: Warm shift (red/yellow more engaging than blue)curves: S-curve for film-like contrastunsharp: Sharpen for mobile clarity| Platform | Target LUFS | True Peak | Reasoning |
|---|---|---|---|
| TikTok | -10 to -12 LUFS | -1.5 dBTP | Mobile speakers need volume |
| YouTube Shorts | -13 to -15 LUFS | -1.5 dBTP | YouTube normalizes to -14 LUFS |
| -10 to -12 LUFS | -1.5 dBTP | Same as TikTok | |
| -13 LUFS | -1 dBTP | Facebook normalizes to -13 LUFS |
Key insight: TikTok/Instagram favor louder audio (-10 to -12 LUFS) vs YouTube/Facebook (-13 to -14 LUFS).
# Fade in quickly from silence (0.3s hook)
ffmpeg -i input.mp4 \
-af "afade=t=in:st=0:d=0.3,loudnorm=I=-11:TP=-1.5" \
-c:v copy \
output_volume_swell.mp4
# Heavy bass for music content (TikTok dances, etc.)
ffmpeg -i input.mp4 \
-af "bass=g=8:f=110:w=0.5,loudnorm=I=-11:TP=-1.5:LRA=11" \
-c:v copy \
output_bass_hook.mp4
# Compress and boost voice frequencies
ffmpeg -i input.mp4 \
-af "highpass=f=100,lowpass=f=8000,compand=attacks=0:points=-80/-900|-45/-15|-27/-9|0/-7|20/-7:gain=5,loudnorm=I=-11:TP=-1.5" \
-c:v copy \
output_voice_hook.mp4
# Layer whoosh sound effect on video hook
ffmpeg -i video.mp4 -i whoosh.mp3 \
-filter_complex "\
[1:a]afade=t=in:st=0:d=0.1,afade=t=out:st=0.4:d=0.1,volume=2[sfx];\
[0:a][sfx]amix=inputs=2:duration=first:weights='1 0.7',loudnorm=I=-11:TP=-1.5[a]\
" \
-map 0:v -map "[a]" \
-c:v copy -c:a aac -b:a 192k \
output_with_sfx.mp4
# Dynamic range compression for mobile speakers (prevents quiet parts)
ffmpeg -i input.mp4 \
-af "acompressor=threshold=-18dB:ratio=4:attack=5:release=50,loudnorm=I=-11:TP=-1.5" \
-c:v copy \
output_compressed_audio.mp4
viral-video-platform-specs - Platform requirementsviral-video-animated-captions - Caption stylingffmpeg-viral-tiktok - TikTok optimizationffmpeg-viral-shorts - YouTube Shorts optimizationThis skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.