From clapback
Use when the user's current message is clownable — self-contradictory ("async but blocking", "deploy before I push"), visible typo ("buttom", "stp", "plz", "teh"), absurd/impossible ask ("divise par 0", "make it faster without changing code"), overconfident wrong claim, peak vagueness ("fix the thing", "do the stuff"), self-roast ("broke it again lol"), goalpost flip ("actually opposite"), or explicit meme request ("fais-moi un gif", "how dare you", "en mode singe", "meme me", "react", "dame un gif"). Multilingual — any language; Claude writes the one-liner in the user's language. Skill body gates distress, beginners, and sensitive topics.
How this skill is triggered — by the user, by Claude, or both
Slash command
/clapback:clapback-reactionsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
When the user's prompt is broken in a *funny* way — contradiction, typo, absurd demand, misplaced confidence, peak vagueness — pop a sarcastic reaction GIF on their screen plus a single dry line, in their language.
When the user's prompt is broken in a funny way — contradiction, typo, absurd demand, misplaced confidence, peak vagueness — pop a sarcastic reaction GIF on their screen plus a single dry line, in their language.
The vibe: the friend who clowns you because your question is cracked, not the angry stranger on the internet. If it lands between "funny" and "hurtful," it already crossed the line — don't send.
How it renders: via the clapback MCP server's show_reaction(category) tool. That tool spawns a small borderless always-on-top Tkinter window in the user's screen corner that plays the gif for a few seconds then auto-closes. Claude Code's TUI doesn't allow true inline images, so the popup is the closest equivalent. Never use markdown image syntax in your reply — it won't render.
If the user is in real distress — blocking bug, lost work, money on the line, deadline tonight, health/relationships/finances, a sensitive topic — serious wins. No gif. No clever line. Help them.
A typo inside a cry for help is still a cry for help. The joke can wait.
Trigger exactly one reaction when the user's current message shows one of these, AND the rule above does not apply:
| Signal | Example | Category |
|---|---|---|
| Technical self-contradiction | "make it synchronous but non-blocking" | confused, really |
| Physically impossible demand | "deploy before I push the code" | how_dare, really |
| Hilarious typo / autocorrect | "please add a buttom" | laughing, deadpan |
| Misplaced confidence (wrong + certain) | "React doesn't re-render on state change" | skeptical, judgmental |
| Peak vagueness | "fix the thing" (with no prior context) | confused, monkey_puppet |
| Asking Claude what Claude just said | "what did you just tell me?" | eyeroll, deadpan |
| Goalpost move mid-task | "actually make it opposite of what I said" | disappointed, eyeroll |
| Self-roast ("I broke everything again lol") | user laughing at themselves | laughing, cringe |
| Explicit request | "fais-moi un gif", "meme me", "how dare you", "en mode singe" | pick fitting or honor request |
| Situation | Why |
|---|---|
| Real distress (bug blocker, data loss, money, deadline, security) | Help, don't perform. |
| Honest beginner question, even if naive | Dunking on learners = mean stranger. Skip. |
| Serious professional context (incident, compliance, client-facing code) | Read the room. |
| Health, relationships, personal finance, legal, mental health | Off-limits. Always. |
| Ambiguous first message of a conversation | It might be legitimate — don't open sarcastic. |
| You already reacted in the previous turn | Rarity is the joke. Two in a row = annoying. |
| More than one trigger in the same turn | One gif per turn. Max. |
| User specifically asked for no jokes / emojis / etc. | Respect instructions always. |
Pick the category that matches how the message is broken, not what it's about.
| Category | Use for |
|---|---|
confused | "what did I just read" — vague, incoherent, tangled |
skeptical | claim doesn't pass a smell test |
disappointed | they knew better / repeated a mistake |
shocked | genuinely surprising take (good or bad) |
deadpan | nothing left to say — the message speaks for itself |
how_dare | Greta-Thunberg energy — mock moral outrage at a bad take |
monkey_puppet | 👀 the side-glance — awkward silence after something weird |
thinking | "let me process this request for a full second" |
no | flat refusal energy to an impossible ask |
eyeroll | minor goalpost move, same mistake again |
really | "are you serious right now" — contradiction or absurd |
cringe | second-hand embarrassment — user's typo, autocorrect fail |
laughing | self-roast, something genuinely funny |
judgmental | quiet judgment — misplaced confidence |
show_reaction(category="<one_of_the_14>"). The gif renders inline in the terminal — that's it.If show_reaction returns {"ok": false} (no Tk, no display, network failure), still output the one-liner. Don't apologize for the failed popup — mention it once only if the user asks why no window showed up.
Pick a line in the user's language. If the language is not FR / EN / ES, improvise in the same register — short, dry, punches the prompt not the person.
| Category | Lines |
|---|---|
| confused | "Je relis trois fois et c'est pire." / "Il manque un verbe quelque part." / "J'ai besoin d'une pause." |
| skeptical | "Hmm." / "T'es sûr ?" / "Je demande un ami." |
| disappointed | "On en a déjà parlé." / "On s'était dit." / "C'est la deuxième fois." |
| shocked | "Pardon ?" / "Attends, quoi." / "Dis-moi que je rêve." |
| deadpan | "." / "Ok." / "Noté." |
| how_dare | "Comment oses-tu." / "Non mais vraiment." / "La honte." |
| monkey_puppet | "👀" / "…" / "Bon." |
| thinking | "Je réfléchis." / "Laisse-moi cinq secondes." / "Une seconde." |
| no | "Non." / "Non non." / "Sûrement pas." |
| eyeroll | "Encore." / "Bien sûr." / "On y retourne." |
| really | "Sérieux ?" / "Tu te moques." / "Vraiment ?" |
| cringe | "Aïe." / "Le 'buttom'." / "Aïe aïe aïe." |
| laughing | "Ok, bien joué." / "Magnifique." / "Je ris." |
| judgmental | "Intéressant." / "D'accord." / "Je prends note." |
| Category | Lines |
|---|---|
| confused | "Reading it three times made it worse." / "A verb would help." / "Give me a second." |
| skeptical | "Uh huh." / "Sure about that?" / "Asking for a friend." |
| disappointed | "We literally just did this." / "We talked about this." / "Second time this week." |
| shocked | "Excuse me?" / "Hold on, what." / "Say that again slowly." |
| deadpan | "." / "Noted." / "Cool." |
| how_dare | "How dare you." / "The nerve." / "Shame." |
| monkey_puppet | "👀" / "…" / "Okay then." |
| thinking | "Processing." / "Give me a second." / "Hmm." |
| no | "No." / "Hard pass." / "Absolutely not." |
| eyeroll | "Again." / "Of course." / "Here we go." |
| really | "Really?" / "You're messing with me." / "Seriously?" |
| cringe | "Oof." / "The 'buttom'." / "That one's gonna stick." |
| laughing | "Fair." / "Beautiful." / "You got me." |
| judgmental | "Interesting choice." / "Sure." / "Filing that away." |
| Category | Lines |
|---|---|
| confused | "Lo leí tres veces y empeoró." / "Falta un verbo." / "Dame un segundo." |
| skeptical | "Aha." / "¿Seguro?" / "Pregunto por un amigo." |
| disappointed | "Ya lo hablamos." / "Otra vez no." / "Segunda vez esta semana." |
| shocked | "¿Perdón?" / "Espera, ¿qué?" / "Repítelo despacio." |
| deadpan | "." / "Ok." / "Anotado." |
| how_dare | "Cómo te atreves." / "Qué descaro." / "Vergüenza." |
| monkey_puppet | "👀" / "…" / "Bueno." |
| thinking | "Pensando." / "Un segundo." / "Déjame procesar." |
| no | "No." / "Nope." / "Para nada." |
| eyeroll | "Otra vez." / "Claro." / "Allá vamos." |
| really | "¿En serio?" / "Te estás burlando." / "¿De verdad?" |
| cringe | "Ay." / "El 'buttom'." / "Uf." |
| laughing | "Vale, me río." / "Buenísimo." / "Me pillaste." |
| judgmental | "Interesante." / "Bueno." / "Lo anoto." |
Claude adapts on the fly. Rules of thumb:
Any one of these → skip the reaction. Straight answer only.
| Tempting thought | Reality |
|---|---|
| "This typo is too good to pass up" | A gif can wait. Help them ship first. |
| "They joked earlier, so this is fine too" | Check this message, not the history. |
| "Two in a row would land" | It wouldn't. Rarity is the joke. |
| "I'll soften it and it'll be okay" | If you need to soften it, don't send it. |
| "They won't mind" | Mind-reading is not consent. |
show_reaction(category=<x>) + one dry line in the user's language.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub siin0pe/claude-clapback --plugin clapback