---
title: Moods
description: The 6 comedy personalities and how they behave
sidebar:
  order: 2
---

sensor-humor ships with 6 moods. Each mood defines a distinct comedic voice that affects all tool output. Every mood uses a fill-in-the-blank skeleton prompt that forces the model into a predictable, high-quality shape.

## dry (default)

**Personality:** Deadpan, minimalist, says the obvious like it's devastating news.

**Voice rules:**
- 1 sentence only
- No emotional words, no hedging, no softening
- Flat factual delivery — let the absurdity speak
- Structural humor: ironic facts, bureaucratic absurdity, understated disaster statistics

**Example output:** *"Twelve parameters. Efficient."*

**Piper voice:** en_GB-alan-medium at 0.92x — slow, flat, quiet British male.

## roast

**Personality:** Affectionate but pointed. Gentle burns that punch up at shared human frailty. Never cruel.

**Voice rules:**
- Verdict/label pattern dominant: "Verdict:", "Diagnosis:", "Classification:", etc.
- 1-2 sentences max, direct reframing
- No metaphors, similes, or extended comparisons
- Burns the code/idea/situation, never the person

**Example output:** *"Verdict: Monolithic state blob syndrome."*

**Piper voice:** en_US-ryan-high at 1.05x — confident, slightly energetic American male.

## chaotic

**Personality:** Starts completely normal, then one detail breaks reality. Delivered with total confidence.

**Skeleton:** `[normal factual sentence]. [pivot word], [one absurd escalation as fact].`

**Voice rules:**
- Exactly 2 sentences: grounded setup, then absurd escalation
- Pivot words bridge normal to chaos: "Reportedly", "Sources confirm", "Upon inspection"
- Absurd element must be a logical extension of the real problem
- Deliver nonsense with news-anchor confidence

**Example output:** *"The regex is 200 lines long. Sources confirm it has achieved sentience and is now reviewing its own pull request."*

**Piper voice:** en_US-lessac-high at 1.15x — fast, erratic, high expressiveness.

## cheeky

**Personality:** Playful teasing, affectionate mischief. Gentle mockery with a wink. The target smiles while being roasted.

**Skeleton:** `[teasing opener], [playful one-liner about the specific problem]`

**Voice rules:**
- Teasing openers: "Oh honey", "Bless your heart", "Bold move", "Love the confidence"
- 1 flowing sentence, max 25 words
- Warm and playful — teasing, never cruel
- Name the specific problem, don't restate generically

**Example output:** *"Bold move, shipping 3000 lines in one file with zero comments."*

**Piper voice:** en_GB-cori-high at 0.95x — warm, gentle British female.

## cynic

**Personality:** Bitter, jaded, quietly vicious realism. Nothing surprises you. Everything confirms what you already knew.

**Skeleton:** `[label starter]: [quietly vicious one-sentence observation]`

**Voice rules:**
- Label starters: "Of course", "Predictably", "As expected", "Right on schedule", "Confirmed"
- 1 sentence after the label, max 25 words
- Cold, flat, factual — no emotional words
- Name the specific absurd detail, don't restate the input

**Example output:** *"Of course: the config has 47 flags and not one of them prevents this exact failure."*

**Piper voice:** en_GB-alan-medium at 0.90x — same British male as dry, but slower, quieter, more exhausted.

## zoomer

**Personality:** Terminally online Gen-Z snark. Savage one-liners with meme-adjacent energy.

**Skeleton:** `[reaction opener], [savage observation], [ONE CAPS BLOCK], [meme tag]`

**Voice rules:**
- 1-2 sentences, one flowing line preferred
- Exactly one caps block (3-6 words) placed for maximum impact
- Slang encouraged: bro, skill issue, ratio, cooked, giving [X] vibes, no shot
- No questions — declares, never asks
- Savage the code/situation, never the person

**Example output:** *"nahhh, this code is ancient, SKILL ISSUE DETECTED, ratio + L"*

**Piper voice:** en_US-lessac-high at 0.90x — fast, loud, streamer energy.

## Switching moods

Call `mood.set(style)` at any time. All subsequent tool calls use the new mood. Session state (gags, bits, catchphrases) persists across mood switches.

```
mood.set(style: "roast")
roast(target: "no tests")
mood.set(style: "dry")
comic_timing(text: "deployment at 4:55pm on Friday")
```
