skills/bad-faith-rhetoric-detector/SKILL.md
Describe patterns that may indicate bad-faith or manipulative communication including gish gallop, whataboutism, tone policing, motte-and-bailey, sealioning, lying by omission, deflection, and strategic evasion. Use when the user suspects manipulation, notices repeated non-engagement, wants to analyze debate tactics, or mentions 'bad faith', 'deflection', 'manipulation', 'dodging the question', 'avoiding the issue', 'gaslighting', 'moving goalposts'. Describes behavioral patterns without making psychological diagnoses.
npx skillsauth add curiositech/windags-skills bad-faith-rhetoric-detectorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Load this skill when the user suspects manipulation, asks about "bad faith" responses, wants to analyze debate tactics, or uses phrases like "dodging the question," "moving goalposts," or "gaslighting."
1. WHAT was the original question/claim?
↓
2. HOW did the response handle it?
├─ Completely ignored → Stonewalling or Deflection
├─ Replaced with different topic → Whataboutism or Gish Gallop
├─ Attacked the asking style → Tone Policing
├─ Retreated to safer claim → Motte-and-Bailey
└─ Demanded excessive proof → Sealioning or Burden-Shifting
↓
3. WHAT was the emotional effect?
├─ Exhaustion from volume → Gish Gallop (primary)
├─ Self-doubt about reasonableness → DARVO or Gaslighting
├─ Confusion about what was agreed → Moving Goalposts
└─ Frustration at non-engagement → Stonewalling (primary)
High Confidence (>80%):
├─ Pattern appears 3+ times in exchange
├─ Clear quotes demonstrate the behavior
└─ Effect on conversation is obvious
Medium Confidence (50-80%):
├─ Pattern appears 1-2 times
├─ Some ambiguity in interpretation
└─ Could be defensive behavior instead
Low Confidence (<50%):
├─ Single instance only
├─ Multiple reasonable interpretations
└─ Context suggests good faith possible
IF relationship is unsafe OR pattern is clearly intentional
→ Name + Exit (use boundary scripts)
ELSE IF pattern seems defensive/overwhelmed
→ Name + Pause ("Let's take a step back...")
ELSE IF user needs ongoing relationship
→ Name + Limit ("I'll engage with X, but not Y")
ELSE IF one-off interaction
→ Exit without explanation
Symptom: Finding bad faith everywhere, even in ambiguous exchanges Detection Rule: If >70% of analyzed exchanges show "bad faith," you're overcalling Fix: Force charitable interpretation first, then pattern match second
Symptom: Diagnosing psychological conditions from rhetoric patterns Detection Rule: Using words like "narcissist," "sociopath," or "personality disorder" Fix: Stick to behavioral descriptions only: "This response pattern avoids..."
Symptom: Labeling legitimate disagreement as "bad faith" Detection Rule: No actual question dodging, just unwelcome answer Fix: Distinguish between "didn't answer how I wanted" vs "didn't answer at all"
Symptom: User wants help deploying these tactics themselves Detection Rule: Questions focus on "how to" rather than "is this happening" Fix: Decline to assist with tactical deployment; redirect to productive discourse
Symptom: Endless cataloging without decision or action Detection Rule: 3+ rounds of pattern identification with no boundary setting Fix: "What do you want to do with this information?" Force decision point
User: "My boss said in the meeting that our department 'needs major restructuring and some people aren't pulling their weight.' When I asked privately who specifically and what changes, he said 'I'm just saying we all need to step up our game.' Is this bad faith?"
Analysis Process:
Output: "This follows a motte-and-bailey pattern - making a specific concerning claim (major restructuring, people not pulling weight) then retreating to an uncontroversial position (everyone should work hard) when pressed for details. This could indicate he's testing reactions before committing to specifics, or he may lack a concrete plan but wants to create urgency."
User: "I told my partner I felt hurt when they canceled our plans last minute again. They said 'I can't believe you're attacking me when I'm dealing with work stress. You never support me when I'm struggling.' Did I do something wrong?"
Analysis Process:
Output: "This response follows DARVO - your concern about canceled plans was denied ('can't believe you're attacking'), you were attacked for raising it, and they repositioned themselves as the victim who needs support. This could be manipulative, or it could be a defensive reaction from someone who feels overwhelmed and criticized. The effect either way is that your original concern (cancellation pattern) remains unaddressed."
Analysis is complete when you can answer YES to all:
Do NOT use this skill for:
productive-discourse-facilitator for ethical persuasioncommunication-clarity-optimizer for self-improvementfactual-accuracy-verifier for truth claimsDelegate when:
boundary-setting-navigatorrelationship-repair-facilitatordata-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.