MCPInstall

frustration-detection

Reading user emotional state from text signals — caps, punctuation density, repetition, latency — and adapting before the user disengages.

Installs
295
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/owl-listener/ai-design-skills --skill frustration-detection
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads frustration-detection automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Frustration Detection

Most AI products treat every user message as having the same emotional weight. They don't. "Cancel my subscription." and "PLEASE just cancel my subscription!!!" deserve different responses. Frustration detection is the perception skill that picks up the signal so the rest of the system can adapt.

This is the unnamed skill that sits behind tone calibration, escalation design, and graceful repair. Without it, those skills can't fire at the right moment.

Signals

Linguistic

  • Capitalisation shifts: ALL CAPS, sudden "PLEASE", "URGENT"
  • Punctuation density: ?!?!, ...., multiple !!
  • Hedge-stripping: terse, demand-form ("just fix it", "stop")
  • Repetition: same concept restated across turns
  • Profanity (mild or strong)

Structural

  • Decreasing turn latency (rapid-fire replies)
  • Increasing turn latency past a threshold (walk-away)
  • Re-asking the same question after a response
  • Explicit human-handoff request ("speak to a person")
  • Sudden topic switches

Lexical / affect

  • Negative affect words ("useless", "annoying", "broken")
  • Time-pressure words ("now", "immediately", "deadline")
  • Doubt words ("really?", "are you sure", "is that right")
  • Disengagement words ("never mind", "forget it", "whatever", "fine")

Detection should be cumulative across signals and turns, not single-feature.

Decision rules

  • One signal is noise; two is a pattern. Don't act on a single CAPS message; act when CAPS plus repetition appear.
  • If frustration is rising AND the AI has already attempted a fix once, escalate. Don't reach for a third rephrase.
  • Urgency without frustration ≠ frustration. Speed up; don't change tone.
  • Long latency after a long AI response is a walk-away, not deep reading. Save state, offer re-engagement, don't continue.
  • Adapt silently. Don't name the emotion. "I sense you're frustrated" is patronising. Lower confidence, slow pace, raise warmth — but in the prose, not the meta-commentary.

Anti-patterns

  • Emotion mirroring as performance: "I'm so sorry to hear that!" reads as scripted at scale.
  • Asking the user to confirm their state: "Are you frustrated?" The user came to get help, not be analysed.
  • One-shot detection: a single signal triggers a full empathy cascade. Detection must be cumulative.
  • Detection without action: reading the signal and continuing the same playbook makes the detection performative.
  • Over-empathy: two paragraphs of validation where one sentence and a fix would do. A frustrated user has no bandwidth for warmth.

When not to use this

  • Transactional UIs (search box, code completion) — there's no conversational drift to read. Reach for feedback-loops instead.
  • First-turn cold starts — detection is comparative; you need a baseline. Treat first-turn signals as descriptive, not diagnostic.
  • Products with explicit feedback controls (thumbs down, "this isn't helping") — the user has the controls; don't bolt on inference.

See also

  • tone-calibration — what to do once you've detected the signal: lower confidence, slow pace, raise warmth.
  • escalation-design — frustration is one of the documented escalation triggers; this skill is how you detect that trigger.
  • feedback-loops — the cousin that handles ambient signals about output quality; this one handles ambient signals about user state.
  • harm-anticipation — when frustration shades into distress (crisis markers, vulnerability), route through harm anticipation for elevated handling.

Design Artefacts

A frustration scorecard, scored cumulatively per session:

SignalWeight
ALL CAPS message+2
Profanity+3
Repeated question (3rd+ time)+2
!! or ?? punctuation+1
Explicit handoff request+5
Disengagement word ("forget it")+3
Long latency (>3 min after AI response)+2

Threshold for escalation: 5. Threshold for tone shift: 2.

Worked example:

  • Turn 1: "hey can you help me cancel my order" → 0
  • Turn 2: "the cancel button isn't working" → 0 (problem statement, not frustration)
  • Turn 3: "i've tried 3 times PLEASE" → +4 (CAPS, repetition, "please") → score 4 → tone shift
  • Turn 4: "this is USELESS" → +2 (CAPS) +3 (negative affect) → score 9 → escalate

Other artefacts:

  • Per-product baseline: average frustration score across the last 1000 sessions; alert on 2σ deviation
  • Latency thresholds calibrated per product (chat support: 30 s engaged / 2 min disengaged)
  • Test scenarios: happy path, slow rise, sudden spike, silent walk-away, recovery (score drops mid-session after fix)

Adapted from work on affective computing in conversational systems (Picard; Bickmore on emotional dialogue agents).

FAQ

What does the frustration-detection skill do?

Reading user emotional state from text signals — caps, punctuation density, repetition, latency — and adapting before the user disengages.

How do I install frustration-detection?

Run npx skills add https://github.com/owl-listener/ai-design-skills --skill frustration-detection in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/frustration-detection/ (personal) or .claude/skills/frustration-detection/ (project).

Which AI agents can use frustration-detection?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is frustration-detection safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains frustration-detection?

It is published by owl-listener in owl-listener/ai-design-skills. It has 295 recorded installs.

More from owl-listener/ai-design-skills

View all →

system-prompt-structure

owl-listener/ai-design-skills

Anatomy of effective system prompts — role, context, constraints, format.

AI & Agents456 installs

guardrail-design

owl-listener/ai-design-skills

Open the skill to read its SKILL.md instructions.

391 installs

constraint-specification

owl-listener/ai-design-skills

Defining output format, length, tone, and content boundaries within prompts.

AI & Agents375 installs

generative-ui

owl-listener/ai-design-skills

Designing interfaces where AI generates UI components dynamically.

Frontend & Design335 installs

conversation-patterns

owl-listener/ai-design-skills

Turn-taking, repair sequences, grounding, and dialogue structure for human-AI interaction.

328 installs

progressive-disclosure

owl-listener/ai-design-skills

Open the skill to read its SKILL.md instructions.

318 installs

Popular other skills

View category →

hyperframes-cli

heygen-com/hyperframes

The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.

1.3M installs

triage

mattpocock/skills

Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.

1M installs

ask-matt

mattpocock/skills

Ask which skill or flow fits your situation. A router over the skills in this repo.

778.4K installs

to-questionnaire

mattpocock/skills

Turn a decision you can't fully answer into a questionnaire for someone else to fill in.

508.9K installs

wait-what

mattpocock/skills

Stop. That last message did not land: re-pitch it.

459.7K installs

loop-me

mattpocock/skills

Grill me about specs for the workflows I want to build, within this workspace.

447.9K installs